开发的web工程改用jndi来配置数据源。
spring配置:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/yourDataSource</value>
</property>
</bean>
tomcat的server.xml中配置Resource(可放置在GlobalNamingResources中):
<Resource name="jdbc/yourDataSource"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/yourDataBase?characterEncoding=utf8"
username="testuser"
password="testpassword"
maxIdle="20"
maxWait="2000"
maxActive="20"
removeAbandoned="true"
removeAbandonedTimeout="180"
logAbandoned="true"
factory="com.alibaba.druid.pool.DruidDataSourceFactory" />
注意如果缺失相应的jar包,需要拷贝jar包到tomcat/lib下,这里用的是druid
具体项目的<Context></Context>标签中引用
<ResourceLink global="jdbc/yourDataSource" name="jdbc/yourDataSource" type="javax.sql.DataSource"/>
问题来了,我的web容器是tomcat8,且集成大eclipse中了,每次启动时都会为单个项目在tomcat\conf\Catalina\localhost目录下生成单独的xxx.xml文件。如果在tomcat目录下的server.xml中进行设置,每次设置都还原了。启动tomcat则报找不到数据源
后来查资料才知道,Resource配置在错误的地方了。
如上图配置,jndi要配置到eclipse的Servers的对应tomcat下的server.xml中,ResourceLink 也是。