2017-05-19 1 views
1

J'ai une application de démarrage à ressort utilisant un modèle jdbc à ressort pour la connexion de la couche DAO à Oracle DB. Le nom d'utilisateur de la base de données est différent du schéma sur lequel les requêtes seront exécutées. Par conséquent, lorsque les requêtes sont exécutées, il faut exécuter un schéma différent et je ne veux pas préfixer la valeur codée en dur pour le schéma (Par ex select * from user1.table.....)Configurer le schéma de base de données dans l'application de démarrage du ressort à l'aide du modèle jdbc

J'ai recherché un peu et je ne pouvais pas trouver un moyen simple et direct pour faire ça.

Ex si j'utilisais JPA je aurais pu simplement configurer la propriété spring.jpa.properties.hibernate.default_schema=<schema name> mais ne pouvait pas trouver un moyen équivalent de la configuration même lors de l'utilisation du printemps jdbc

Répondre

-1

Vous devez utiliser le pilote JDBC Oracle.

Un bon exemple:

Tirée de l'article mykong:

# Oracle settings 
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe 
spring.datasource.username=system 
spring.datasource.password=password 
spring.datasource.driver-class-oracle.jdbc.driver.OracleDriver 

https://www.mkyong.com/spring-boot/spring-boot-spring-data-jpa-oracle-example/ 
+1

Cela ne fournit pas la réponse que je suis à la recherche. Dans les propriétés ci-dessus, il n'y a pas de propriété pour le schéma. – ak123

0

je suis tombé sur un problème similaire et n'a pas trouvé un moyen idéal pour le faire. J'ai fini par définir le schéma en SQL lorsque l'application était chargée. Au moins, j'ai pu réutiliser spring.jpa.properties.hibernate.default_schema, que j'avais déjà défini pour le schéma par défaut de JPA.

final String schemaName = jpaProperties.getProperties().get("hibernate.default_schema"); 
jdbcTemplate.execute("SET SCHEMA '" + schemaName + "'"); 

Ceci n'est clairement pas idéal, mais c'est mieux que de définir votre schéma à plusieurs endroits.

(Note: J'autowired les deux JpaProperties et JdbcTemplate.)