Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden Sie Mysql in dev/prod und H2 in test

Es gibt ein paar Tricks, die Sie vielleicht nützlich finden.

Erstens, MySQLs /*! */ Notation erlaubt es Ihnen, Code hinzuzufügen, dem MySQL gehorcht, aber andere DBs ignorieren, zum Beispiel:

create table Users (
  id bigint not null auto_increment,
  name varchar(40)
) /*! engine=InnoDB */

Es ist keine Wunderwaffe, aber es wird Ihnen helfen, einige der Unterschiede zwischen der Syntax von MySQL und H2 zu überarbeiten. Es ist ein MySQL-Ismus, also wird es bei anderen Datenbanken nicht helfen, aber da die meisten anderen Datenbanken nicht so schrullig sind wie MySQL, würden Sie es wahrscheinlich nicht brauchen - wir haben unsere Datenbank von MySQL auf PostgreSQL migriert, was nicht der Fall ist unterstützt den /*! */ Notation, aber PostgreSQL ist H2 so ähnlich, dass wir es nicht brauchten.

Wenn Sie eine andere Konfiguration für dev und prod verwenden möchten, ist es wahrscheinlich am besten, eine zusätzliche Konfiguration für prod zu haben. Der Grund dafür ist, dass Sie Ihren Dev-Server wahrscheinlich mit play run starten werden , und starten Sie Ihren Prod-Server mit play stage; target/start . target/start kann eine -Dconfig.resource nehmen Parameter. Erstellen Sie beispielsweise eine zusätzliche Konfigurationsdatei prod.conf für prod sieht das so aus:

include "application.conf"

# Extra config for prod - this will override the dev values in application.conf
db.default.driver=...
db.default.url=...
...

und erstellen Sie ein start_prod Skript, das so aussieht:

#!/bin/sh

# Optional - you might want to do this as part of the build/deploy process instead
#play stage
target/start -Dconfig.resource=prod.conf

Theoretisch könnten Sie es auch umgekehrt machen und application.conf haben die prod conf enthalten und eine dev.conf erstellen -Datei, aber Sie möchten wahrscheinlich trotzdem ein Skript, um prod zu starten (Sie werden wahrscheinlich zusätzliche JVM-/Speicher-/GC-Parameter benötigen oder es zu rc.d hinzufügen oder was auch immer).