实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。
1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;
2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:
<Resource
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
factory="com.alibaba.druid.pool.DruidDataSourceFactory"
maxActive="20"
maxIdel="10"
maxWait="1000"
name="jdbc/snf-paiDS"
password="adminone"
type="javax.sql.DataSource"
url="jdbc:mysql://10.27.82.169/pai?zeroDateTimeBehavior=convertToNull" />
<ResourceLink global="jdbc/snf-paiDS " name="jdbc/snf-paiDS" type="javax.sql.DataSource" />
3:在web.xml中配置druid的监控servletMapping:
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/console/*</url-pattern>
</servlet-mapping>
4:启动启动空的tomcat,如果启动成功,说明配置正确;
5:在eclipse中关联tomcat,(注意关联后的配置,应为已按上面步骤配置好的)。
6:创建一个空的项目,用来访问数据源。
7:新建一个servlet,并在web.xml中配好servletMapping,例如:
【JAVA代码:】
public class HoldConnection extends HttpServlet {
private static final long serialVersionUID = 1L;
private DataSource ds; //声明数据源
private List<Connection> c = new ArrayList<Connection>(); //存放连接,防止被垃圾回收器回收
public HoldConnection() {
super();
try {
Context ic = new InitialContext();
ds = (DataSource) ic.lookup("java:comp/env/jdbc/snf-paiDS");//访问JNDI
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
DruidPooledConnection conn = (DruidPooledConnection) ds.getConnection();//创建druid链接
DruidDataSource dds = (DruidDataSource) ds; //创建druid的数据源
c.add(conn);//放入list中,防止被回收
System.out.println(ds);
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet( request, response);
}
}
【web.xml配置:】
<servlet>
<servlet-name>ds</servlet-name>
<servlet-class>com.suning.phl.dbcp.HoldConnection</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ds</servlet-name>
<url-pattern>/ds/*</url-pattern>
</servlet-mapping>
8:将项目发布到tomcat中启动;
9:访问HoldConnection;
10:访问druid控制台,查看数据源对象。
11:再新建一个项目,重复上面第6-8步;
12:重新访问两个项目中的HoldConnection(注意路径不要一样),然后再访问druid控制台,查看数据源对象,此时发现:创建了两个数据源对象,
由此可以得出结论,在容器中配置的数据源,通过不同的项目实例访问会创建不同的数据源对象。
假设:数据库的连接数最大值设置为1000,容器中的连接数配置为1000.如果只有一个实例访问数据源,那么是没有问题的。
假设有两个实例访问数据源,如果两个实例的总连接数之和大于1000,那么超出的部分是没办法进行数据库访问的。
案例如下:
相关推荐
然后,为了让Web应用能够访问这个全局数据源,我们需要在每个Web应用的`context.xml`文件(如果没有则创建)中,添加一个`<ResourceLink>`元素,将全局数据源链接到当前Web应用: ```xml <!-- ... --> ``` ...
在上面的配置中, `<ResourceLink>` 节点引用了全局数据源, `global` 属性指定了全局数据源的名称, `name` 属性指定了数据源的名称, `type` 属性指定了数据源的类型。 JNDI 数据源配置提供了两种方式供选择,...
- **简化作业管理**:对于频繁变更的数据(如日期、路径等),使用全局参数可以避免每次修改都需要对多个作业进行更新。 - **提高灵活性**:当业务需求发生变化时,只需要调整全局参数的值即可,无需改动原有的作业...
在 Tomcat 的 Catalina\localhost 目录下,可以新建一个 XML 文件,文件名以应用程序名为名,内容与 server.xml 文件中的 Context 节点一样,可以直接配置私有数据源,也可以引用全局数据源。 例如,在 Catalina\...
- 高可用性:在集群环境中,可以配置全局数据源,以实现故障切换和负载均衡。 - 数据源的扩展:随着业务的发展,可能需要添加新的数据源或修改现有数据源的配置,这时需要考虑对系统的影响,确保平滑过渡。 通过...
2. 配置`web.xml`:在Web应用的部署描述符中,添加`<resource-ref>`元素,用于声明应用如何引用上述定义的全局数据源,包括资源描述、引用名称、类型和认证方式。 3. 更新`Context.xml`:如果需要,还可以在Tomcat...
-- 配置全局数据源 --> driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb?useSSL=false" username="root" password="password" maxActive="100" maxIdle="30" maxWait="10000...
配置完成后,需要在`context.xml`文件(通常位于`META-INF`目录下或者`WEB-INF`目录下的`context.xml`)中,将这个全局数据源引入到你的Web应用中,这样应用才能通过JNDI查找并使用这个数据源: ```xml ... .....
总结,配置Tomcat 5.5及以上版本的JNDI数据源涉及多个步骤,包括添加JDBC驱动、配置全局数据源、在应用中引用数据源以及在代码中通过JNDI查找并使用数据源。选择全局或局部配置取决于应用的需求和资源的共享范围。...
此文件用于定义全局数据源,所有部署在Tomcat上的Web应用都可以共享这个数据源。 2. **定义数据源**:在`context.xml`中添加以下XML代码来定义一个名为`myDS`的数据源: ```xml type="javax.sql.DataSource" ...
配置完成后,需在具体应用的Context的“Resource Links”中关联全局数据源,确保JNDI名称与`web.xml`中的一致。 3. 配置单个应用的数据源: 在Tomcat管理界面的“Service(Catalina) -> Host(localhost) -> Context...
2. 在`server.xml`文件中配置全局数据源: ```xml auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/appdb" username="root" ...
2. **配置context.xml**:在每个Web应用的`META-INF/context.xml`或Tomcat的`conf/Catalina/localhost/应用名.xml`中,映射全局数据源: ```xml ``` 这种方法的好处是,全局的数据源可以在多个Web应用之间...
3. **配置context.xml**:在你的Web应用的`META-INF/context.xml`文件中,声明对上面创建的全局数据源的引用: ```xml ``` `global`属性指定了你在`server.xml`中创建的资源名称。 4. **在代码中使用...
**步骤二**:在Tomcat的`conf/context.xml`文件内的`<Context>`标签中添加以下配置,用于关联全局数据源: ```xml ``` **步骤三**:同样地,在Web应用的`WEB-INF/web.xml`文件中添加相应的数据源引用配置。 #...
在现代企业级应用程序开发中,数据源的管理与事务处理是至关重要的部分。SpringBoot以其简洁的配置和强大的集成能力,成为了许多开发者的首选框架。本主题将深入探讨如何利用SpringBoot结合Atomikos实现动态多数据源...