1)引言:
很多JavaWeb项目,都将数据源配置内容,写在了配置文件上,但实际开发中,为了解耦,一般会将数据源参数配置在外置文件中,以便实施人员,配置正式运行环境。
2)连接方式说明:
目前我了解到的主要有两种方式,可供数据源外置:
2.1)第一种:spring配置文件的datasource中,但是最好不要将参数直接写在spring文件中,要配置在.properties格式的文件中
2.2)第二种:将数据源配置在JNDI配置文件中,JNDI文件放置在tomcat的这个路径下:apache-tomcat-\conf\Catalina\localhost 文件夹下,然后tomcat运行时,会读取这个路劲下的配置文件,并加载对应的项目。
那么,这里涉及到tomcat如何加载启动项目的问题,下面是使用例子:
2.2.1)tomcat文件
2.2.2)JNDI文件格式说明(不同数据库类型,连接方式,驱动包,驱动类都不一样)
例子:JNDI数据库文件格式如下,数据源以sql server2008为例子
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\Workspaces\P707-copy\WebRoot" path="/P707"
reloadable="false" antiJARLocking="true">
<!-- 这里可以添加多个数据源 -->
<!--
这里以sql server2008作为例子
说明:name:是在JAVA程序中调用该数据源时,所用到的名称
数据库名字,因为sqlserver中数据库中有多个小的数据库,所以要定位
用户名,密码,IP地址,端口,基本就是跟连接数据库所用到的信息一样,没什么说的
-->
<Resource auth="Container" name="jdbc/JNDI数据库名字" type="javax.sql.DataSource"
maxActive="50" maxIdle="30" maxWait="5000" username="用户名" password="密码"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://IP地址:端口;DatabaseName=数据库名字;SelectMethod=cursor"
validationQuery="select 0" />
</Context>
sql server2000方式:
驱动类:com.microsoft.jdbc.sqlserver.SQLServerDriver
驱动包:mssqlserver.jar(可能涉及到其他包,这里不考究)
代码:
sql server2008方式:
驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver
驱动包:sqljdbc4.jar(可能涉及到其他包,这里不考究)
代码:
<Resource auth="Container" name="jdbc/JNDI名称" type="javax.sql.DataSource"
maxActive="50" maxIdle="30" maxWait="5000" username="用户名" password="密码"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://IP地址:端口;DatabaseName=数据库名;SelectMethod=cursor"
validationQuery="select 0" />
sql server方式(兼容2000和2008),这个兼容问题,之前遇到过,可看这文章:关于JDK6兼容sql server2016的兼容问题
驱动类:net.sourceforge.jtds.jdbc.Driver
驱动包: jtds-1.2.5.jar
代码:
<Resource name="jdbc/JNDI名称" auth="Container" type="javax.sql.DataSource" maxActive="30"
maxIdle="20" maxWait="10000" validationQuery="select 0" username="用户名" password="密码"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://IP地址:端口;DatabaseName=数据库名称;SelectMethod=cursor"/>
oracle11方式:
驱动类:oracle.jdbc.driver.OracleDriver
驱动包:ojdbc6.jar
代码:
<Resource name="jdbc/JNDI名称"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="FTNHRP"
password="FTNHRP"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST =(ADDRESS=(PROTOCOL=TCP)(HOST=IP地址)(PORT=端口)))(CONNECT_DATA=(SERVICE_NAME=数据库名称)(SERVER=DEDICATED)))"
validationQuery="select 0 from DUAL"
removeAbandoned="true"
removeAbandonedTimeout="60"/>
然后在简单地,可以在spring中这样获取(也可以通过java原生的jndi方式获取)
java:comp/env/jdbc/JNDI名称,其中红色部分,我也不确定是什么
<bean id="datasource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="resourceRef">
<value>false</value>
</property>
<property name="jndiName">
<value>java:comp/env/jdbc/JNDI名称</value>
</property>
</bean>
其他数据源,暂无,待完善
若有问题,请帮忙指正,谢谢!