Tomcat——Tomcat数据源的配置(四种方式,区别webapps目录下的Web应用和其他Web应用)

Tomcat数据源的配置(四种方式<区别webapps目录下的Web应用和其他Web应用>)

 

前期工作:

1. 需要提供特定数据库的JDBC驱动,将mysql-connector-java-5.1.37-bin.jar驱动复制到Tomcat的lib路径下。

2. 创建数据库数据

create database db1;
use db1;
create table stu(
id int primary key,
naem varchar(20),
age int,
score double,
birthday date
);
INSERT INTO stu VALUES(1, "张无忌", 15, 100,"1994-12-16");

 

方式一:单个应用独享数据源(可以是Tomcat的任意web应用,包括webapps文件下的和其他目录下的)

在tomcat中可以在server.xml的host节点中加入Context子节点来进行项目部署,添加一个私有数据源:

 

<Context docBase="D:\webDemo" path="/bbb" reloadable="true"> 
    <Resource  
        name="jdbc/mysql"   
        auth="Container"   
        type="javax.sql.DataSource"  
        driverClassName ="com.mysql.jdbc.Driver"  
        url="jdbc:mysql://localhost:3306/db1"  
        username="root"  
        password="root" 
        maxActive="100"     
        maxIdle="30"      
        maxWait="100000" 			
    />  
</Context>

 

apache-tomcat-9.0.29\conf\Catalina\localhost\ddd.xml(部署web应用可以删除,为了说明不是通过自定义的web部署文件)

<Context docBase="D:\webDemo" />

 

D:\webDemo

D:\webDemo\test.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.*,java.sql.*,javax.sql.*" %>
<html>
  <head>
    <title>Tomcat数据源配置</title>
  </head>
  <body>
	<%

	Context ctx;
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	try{
		ctx=new InitialContext(); 

	DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");

	conn=ds.getConnection();

	stmt=conn.createStatement();

	rs=stmt.executeQuery("select * from stu where id = 1");


	while(rs.next())
	{
		out.println(rs.getInt(1) 
			+ "\t" + rs.getString(2) + "\t" + rs.getInt(3)+ "\t" + rs.getDouble(4)+ "\t" + rs.getString(5) + "<br/>");
	}
	 }catch(Exception e){
		 e.printStackTrace();
	 }finally{
		 if (rs != null) {
			 rs.close();
		 }
		 if (stmt != null) {
			 stmt.close();
		 }
		 if (conn != null) {
			 conn.close();
		 }
	 }

	%>
  </body>
</html>

 

 

 

优点:简单

缺点:重用性差

=======================================================================

 

方式二:配置全局JNDI数据源,应用到所有Tomcat下部署的应用

Tomcat的conf目录下的context.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
</Context>

 

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

	<Resource 
    name="jdbc/mysql"   
    auth="Container"   
    type="javax.sql.DataSource"  
    driverClassName ="com.mysql.jdbc.Driver"  
    url="jdbc:mysql://localhost:3306/db1"  
    username="root"  
    password="root"
	maxActive="100"
	maxIdle="30"
	maxWait="10000"
	/>

</Context>

 

在Tomcat部署下的任意Web应用下创建test.jsp

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.*,java.sql.*,javax.sql.*" %>
<html>
  <head>
    <title>Tomcat数据源配置</title>
  </head>
  <body>
	<%

	Context ctx;
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	try{
		ctx=new InitialContext(); 

	DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");

	conn=ds.getConnection();

	stmt=conn.createStatement();

	rs=stmt.executeQuery("select * from stu where id = 1");


	while(rs.next())
	{
		out.println(rs.getInt(1) 
			+ "\t" + rs.getString(2) + "\t" + rs.getInt(3)+ "\t" + rs.getDouble(4)+ "\t" + rs.getString(5) + "<br/>");
	}
	 }catch(Exception e){
		 e.printStackTrace();
	 }finally{
		 if (rs != null) {
			 rs.close();
		 }
		 if (stmt != null) {
			 stmt.close();
		 }
		 if (conn != null) {
			 conn.close();
		 }
	 }

	%>
  </body>
</html>

=======================================================================

方式三:配置全局JNDI数据源,应用到所有Tomcat下部署的应用(等效方法二)

第一步, 找到Tomcat的server.xml中GlobalNamingResources节点,在节点下加一个全局数据源

 

 

<Resource  
    name="jdbc/mysql"   
    auth="Container"   
    type="javax.sql.DataSource"  
    driverClassName ="com.mysql.jdbc.Driver"  
    url="jdbc:mysql://localhost:3306/db1"  
    username="root"  
    password="root" 
    maxActive="100"     
    maxIdle="30"      
    maxWait="100000" 			
/> 

第二步,找到Tomcat的context.xml,在Context节点下加一个ResourceLink节点对第一步配置的数据源进行引用

 

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />  
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>  

 

在Tomcat部署下的任意Web应用下创建test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.naming.*,java.sql.*,javax.sql.*" %>
<html>
  <head>
    <title>Tomcat数据源配置</title>
  </head>
  <body>
	<%

	Context ctx;
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	try{
		ctx=new InitialContext(); 

	DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql");

	conn=ds.getConnection();

	stmt=conn.createStatement();

	rs=stmt.executeQuery("select * from stu where id = 1");


	while(rs.next())
	{
		out.println(rs.getInt(1) 
			+ "\t" + rs.getString(2) + "\t" + rs.getInt(3)+ "\t" + rs.getDouble(4)+ "\t" + rs.getString(5) + "<br/>");
	}
	 }catch(Exception e){
		 e.printStackTrace();
	 }finally{
		 if (rs != null) {
			 rs.close();
		 }
		 if (stmt != null) {
			 stmt.close();
		 }
		 if (conn != null) {
			 conn.close();
		 }
	 }

	%>
  </body>
</html>

优点:重用性,一次性到位

缺点:没有可控性

=======================================================================

方式四:配置全局JNDI数据源,应用到单个应用(此处只能部署在Tomcat的webapps文件夹下的应用)

第一步, 找到Tomcat的server.xml中GlobalNamingResources节点,在节点下加一个全局数据源

 

<Resource  
    name="jdbc/mysql"   
    auth="Container"   
    type="javax.sql.DataSource"  
    driverClassName ="com.mysql.jdbc.Driver"  
    url="jdbc:mysql://localhost:3306/db1"  
    username="root"  
    password="root" 
    maxActive="100"     
    maxIdle="30"      
    maxWait="100000" 			
/> 

 

第二步,找到要应用此JNDI数据源的工程Context节点,增加对全局数据源的引用ResourceLink 

在aaa目录下新建META-INF文件夹,并新建context.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="aaa" path="/aaa">

	<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />

</Context>

 

Tomcat的conf/context.xml保存最初的:

 

<?xml version="1.0" encoding="UTF-8"?>

<Context>

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

</Context>

=======================================================================

参考资料:

https://blog.csdn.net/dyllove98/article/details/7706218

https://blog.csdn.net/zhanglf02/article/details/76726702

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值