web-dev-qa-db-fra.com

Comment utiliser une source de données Tomcat JNDI JDBC dans Spring Boot

J'ai une application Spring Boot et je souhaite déployer en tant que WAR sur Tomcat 7. Dans le cadre de cela, je dois conserver la configuration en dehors du WAR, afin de pouvoir déployer la même guerre sur mes serveurs de scène et de production et la faire récupérer le connexion mysql via la configuration.

À cette fin, je souhaite configurer mon application Spring Boot pour utiliser une connexion mysql configurée en tant que source de données JNDI dans l'instance Tomcat.

La botte de printemps peut-elle faire cela et si oui, comment?

Alternativement, cela est facile à faire dans Spring 4 sans recourir à une configuration basée sur xml.

19
Zac Tolley
@Bean
public DataSource dataSource() {
  JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
  DataSource dataSource = dataSourceLookup.getDataSource("jdbc/apolloJNDI");
  return dataSource;
}

Aucun "Java: comp/env /" n'est nécessaire car JndiDataSourceLookup appelle en interne convertJndiName qui ajoute cette partie. Dans d'autres classes, vous devez définir le chemin complet.

6
nekperu15739

Si vous utilisez Spring Boot 1.2 ou supérieur, cela est devenu plus facile. Vous pouvez simplement l'ajouter à application.properties

spring.datasource.jndi-name=Java:comp/env/jdbc/my_database

Les documents pertinents: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connecting-to-a-jndi- source de données

16
dustin.schultz

Voici ce que j'avais fait.

Ajoutez ce qui suit à Application.Java

@Bean
public DataSource dataSource() {
  JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
  DataSource dataSource = dataSourceLookup.getDataSource("Java:comp/env/jdbc/mysqldb");
  return dataSource;
}

Suivez ensuite l'exemple de https://spring.io/guides/gs/accessing-data-jpa/ pour configurer les propriétés spécifiques TransactionManager et Hibernate.

4
Yue Liu