如何在Spring Boot中使用Tomcat JNDI JDBC数据源

时间:2014-02-28 17:07:20

标签: tomcat7 spring-data-jpa spring-boot

我有一个Spring启动应用程序,并希望作为WAR部署到Tomcat 7.作为其中的一部分,我需要保持配置不在WAR中,以便我可以将相同的战争部署到我的舞台和生产服务器并且它通过配置拾取mysql连接。

为此,我想配置我的Spring Boot应用程序,以使用在Tomcat实例中配置为JNDI数据源的mysql连接。

Spring boot可以这样做,如果是这样的话?

另外,在Spring 4中这很容易做到,而不需要使用基于xml的配置。

4 个答案:

答案 0 :(得分:15)

如果您使用的是Spring Boot 1.2或更高版本,则更容易实现。您可以将其添加到application.properties

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

相关文档:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connecting-to-a-jndi-datasource

答案 1 :(得分:5)

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

不需要“java:comp / env /”因为JndiDataSourceLookup internaly调用添加此部分的convertJndiName。在其他条款中,您应该设置完整的路径。

答案 2 :(得分:4)

这就是我所做的。

将以下内容添加到Application.java

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

然后按照https://spring.io/guides/gs/accessing-data-jpa/中的示例设置TransactionManager和Hibernate特定属性。

答案 3 :(得分:0)

使用 Spring Boot和外部Tomcat 给所有人的提示。请确保您的战争不包含任何tomcat罐子。 同一罐子的多个版本将生成由javax.naming.NamingException表示的隐藏的ClassCastException。