【发布时间】:2025-12-05 07:20:02
【问题描述】:
我正在尝试在我的 Java Web 应用程序中设置一个 Tomcat 连接池(到 MySQL),同时使用 Spring JDBCTemplate。
这是创建连接池的Java类:
@Configuration
public class DataAccessConfiguration {
@Bean(destroyMethod = "close")
public javax.sql.DataSource datasource() {
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:java-config");
ds.setUsername("sa");
ds.setPassword("");
ds.setInitialSize(5);
ds.setMaxActive(10);
ds.setMaxIdle(5);
ds.setMinIdle(2);
return ds;
}
@Bean public JdbcOperations tpl() {
return new JdbcTemplate(datasource());
}
}
这就是我获得ApplicationContext 的方式(例如在 main 方法中):
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
我应该如何在Beans.xml 文件中定义DataAccessConfiguration 类以便Spring 知道使用它?
**
更新:
**
这是实际的配置方法:
public javax.sql.DataSource datasource() {
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/mysql");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("");
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
ds.setPoolProperties(p);
return ds;
}
你能帮忙改写Beans.xml吗?
【问题讨论】:
-
默认名称为
dataSource。 -
@LuiggiMendoza 我也应该提供课程吗?如果是这样,应该是哪个班级?数据访问配置?
-
如果有组件扫描,你的
Beans.xml中有什么确保@Configuration类被拾取,否则只需将它作为 bean 添加到你的 xml 文件中。 -
在 main 方法中使用 new AnnotationConfigApplicationContext(DataAccessConfiguration.class) 而不是 ClassPathXmlApplicationContext("Beans.xml")。
-
或者如果你真的,真的想要/需要保留新的 ClassPathXmlApplicationContext("Beans.xml") 然后把
放到你的 Beans.xml 中。但是,如果您没有其他基于 XML 的 bean,这将毫无用处。
标签: java mysql spring tomcat jdbctemplate