Browsed by
Tag: mysql

Dynamic switching dev and prod datasource with maven profiles

Dynamic switching dev and prod datasource with maven profiles

maven logo
Most of the time when you develop an application that uses a database you are likely to use another database for your local development work than what you will use later in production. The main reason for this is that there are databases like H2 which by design are fitting the development situation while they are not very well suited for production usage. H2 i.e. has very fast startup times, can run completely in memory -this is an advantage because every time it is restarted its state is reset, too-, uses only few system resources and has a good mySQL compatibility. On the other hand it is not that popular in production as it lacks many functionalities like custom functions, an SQL interpreter etc.. Following this it is a very common scenario to use mySQL in production while using H2 for development. This way the developer can use the same database dialect for development while the local installation of a mySQL DB is not needed.
The problem with this scenario is that you need to switch the datasource to production when you build a new release and switch back to development when you want to use your local H2 for testing. This is something which can easily be forgotten and become annoying over time. Therefore it is a step which could and should be automated.
When you are using JavaEE you define your datasource depending on the application server either via an interactive tool (i.e. glassfish or payara via the asadmin command) or in a xml file (i.e. wildfly/jboss standalone.xml or TomEE context.xml). As an example I show you here a valid datasource definition in the wildly standalone.xml

<subsystem xmlns="urn:jboss:domain:datasources:4.0">
  <datasources>
    <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
      <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
        <driver>h2</driver>
        <security>
          <user-name>sa</user-name>
        </security>
      </datasource>

      <datasource jndi-name="java:jboss/datasources/ExampleMySQLDS" pool-name="ExampleMySQLDS" enabled="true" use-java-context="true">
        <connection-url>jdbc:mysql://localhost:3306/brachub</connection-url>
        <driver>mysql</driver>
        <security>
            <user-name>root</user-name>
            <password>1234</password>
        </security>
        <statement>
            <prepared-statement-cache-size>100</prepared-statement-cache-size>
            <share-prepared-statements>true</share-prepared-statements>
        </statement>
    </datasource>

    <drivers>
      <driver name="h2" module="com.h2database.h2">
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
      </driver>
      <driver name="mysql" module="com.sql.mysql">
        <driver-class>com.mysql.jdbc.Driver</driver-class>
      </driver>
    </drivers>
  </datasources>
</subsystem>

Read More Read More

Ubuntu XAMPP und MySQL Workbench

Ubuntu XAMPP und MySQL Workbench

Ich nutze als Entwicklungsdatenbank gerne ein XAMPP Paket und stieß nun auf ein Problem als ich mit der MySQL Workbench einen Dump einer anderen DB lokal einspielen wollte. Ich konnte meine lokale DB zwar auslesen aber die zum einfügen benötigte SOCKS Verbindung wurde mit folgender Fehlermeldung abgelehnt:

Can’t connect to local MySQL server through socket ‚/var/run/mysqld/mysqld.sock

Das ist soweit auch richtig, denn unter /var/run/mysqld würde normalerweise der MySQL Daemon sitzen wenn ich ihn aus den Paketquellen installieren würde. Da ich aber XAMPP verwende liegt dieser unter /opt/lampp/var/mysql/mysql.sock. Da ich keine Möglichkeit gefunden dies der Workbench irgendwo einmal zentral mitzuteieln habe ich einfach mit

sudo mkdir /var/run/mysqld

ln -sf /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

einen Link erstellt. Nun ist Workbench auch zufrieden und das importieren hat geklappt.

Update: zu beachten ist hierbei das der Link nach jedem Neustart wieder weg ist und neu angelegt werden muss. Um dies zu vereinfachen kann man die nötigen Shellbefehle in ein Shellskript verpacken und dieses per Autostart bei jedem Neustart ausführen lassen.