- Utilizando Spring (ver stack overflow)
- Utilizando Hibernate (ver el mismo link en stack overflow)
- Implementando la interface PersistenceProvider (ver el mismo link en stack overflow y JPA API
- En principio voy a descartar Spring pues mete muchas jars que no necesitamos.
- También voy a descartar usar Hibernate cuando se desmarca de la JPA API
- El tercer método parece un poco laborioso ya que hay que implementar la interface PersistenceProvider.
Lo que he pensado, es tener una persistence unit (o varias) definidas en el persistencel.xml y modificar la conexión a la BD.
Para ello podemos tener un persistence.xml como este
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="sqlserver-jtds" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <!-- Configuring JDBC properties --> <!-- --> <!-- --> <property name="javax.persistence.jdbc.url" value="jdbc:jtds:sqlserver://111.111.11.11:1433/DB2017" /> <property name="javax.persistence.jdbc.user" value="myuser" /> <property name="javax.persistence.jdbc.password" value="mypassword" /> <property name="javax.persistence.jdbc.driver" value="net.sourceforge.jtds.jdbc.Driver" /> <!-- Hibernate properties --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" /> <property name="hibernate.hbm2ddl.auto" value="none" /> <!-- update --> <!-- Configuring Connection Pool --> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="500" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="2000" /> </properties> </persistence-unit> </persistence> |
la idea es seleccionar esta persistence unit "sqlserver-jtds" y cambiarle la propieded "javax-persistence.jdbc.url" a "jdbc:jtds:sqlserver://111.111.11.11:1433/DB2018".
Para ello, basandonos en stack overflow ejecutamos este código java:
1 2 3 | Properties props = new Properties(); props.setProperty("javax.persistence.jdbc.url", "jdbc:jtds:sqlserver://111.111.11.11:1433/DB2018"); EntityManagerFactory emf=javax.persistence.Persistence.createEntityManagerFactory("sqlserver-jtds", props); |
Con lo que hemos aprovechado el persistence.xml que había y le hemos cambiado la conexión programáticamente.
Esto viene bien cuando se cambia de año y hay que trabajar en otra base de datos correspondiente a ese año. Para ello se puede utilizar un fichero de propiedades para guardar el nombre de la BD.
En fin chapucillas que vienen bien y no complican el código.
No hay comentarios :
Publicar un comentario