tomcat mysql mybatis_Mybatis使用Tomcat Jdbc Pool

本文详细介绍了如何将Mybatis的默认数据源替换为Tomcat JDBC Pool,包括解析DataSource配置、理解DataSourceFactory接口,以及实现Tomcat JDBCPoolDataSourceFactory并整合到Spring Mybatis配置中。通过示例展示了如何配置和使用Tomcat JDBCPool,确保了数据源的高效管理和安全性。

想把Mybatis的数据源换成tomcat jdbc Pool,spring整合mybatis那篇分析了Mybatis解析配置过程,要整合其他的DataSource可以想到是要分析解析DataSource配置的部分,下面是部分源码

XMLConfigBuilder.java

1 private DataSourceFactory dataSourceElement(XNode context) throwsException {2 if (context != null) {3 String type = context.getStringAttribute("type");4 Properties props =context.getChildrenAsProperties();5 DataSourceFactory factory =(DataSourceFactory) resolveClass(type).newInstance();6 factory.setProperties(props);7 returnfactory;8 }9 throw new BuilderException("Environment declaration requires a DataSourceFactory.");10 }

可以看到DataSourceFactory这个接口,是为整合其他的DataSource准备的,

下面是DataSourceFactory接口的源码:

public interfaceDataSourceFactory {voidsetProperties(Properties props);

DataSource getDataSource();

}

setProperties可以看到是解析的时候newInstance后,会将配置的参数作为Properties传入对特定的DataSource进行设置,知道了怎么扩展DataSource,

现在在来看下tomcat jdbc pool的用法,下面是介绍的链接

作为Plain Obj来用的是这一段介绍,可以看到中间对DataSource的设置

1 public classSimplePOJOExample {2

3 public static void main(String[] args) throwsException {4 //DataSource配置开始

5 PoolProperties p = newPoolProperties();6 p.setUrl("jdbc:mysql://localhost:3306/mysql");7 p.setDriverClassName("com.mysql.jdbc.Driver");8 p.setUsername("root");9 p.setPassword("password");10 p.setJmxEnabled(true);11 p.setTestWhileIdle(false);12 p.setTestOnBorrow(true);13 p.setValidationQuery("SELECT 1");14 p.setTestOnReturn(false);15 p.setValidationInterval(30000);16 p.setTimeBetweenEvictionRunsMillis(30000);17 p.setMaxActive(100);18 p.setInitialSize(10);19 p.setMaxWait(10000);20 p.setRemoveAbandonedTimeout(60);21 p.setMinEvictableIdleTimeMillis(30000);22 p.setMinIdle(10);23 p.setLogAbandoned(true);24 p.setRemoveAbandoned(true);25 p.setJdbcInterceptors(26 "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+

27 "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");28 DataSource datasource = newDataSource();29 datasource.setPoolProperties(p);30 //dataSource配置结束

31 Connection con = null;32 try{33 con =datasource.getConnection();34 Statement st =con.createStatement();35 ResultSet rs = st.executeQuery("select * from user");36 int cnt = 1;37 while(rs.next()) {38 System.out.println((cnt++)+". Host:" +rs.getString("Host")+

39 " User:"+rs.getString("User")+" Password:"+rs.getString("Password"));40 }41 rs.close();42 st.close();43 } finally{44 if (con!=null) try {con.close();}catch(Exception ignore) {}45 }46 }47

48 }

开始整合测试

先添加tomcat-jdbc的pom依赖,

org.apache.tomcat

tomcat-jdbc

9.0.6

org.apache.tomcat

tomcat-juli

9.0.6

然后写我们自己的DataSourceFactory

1 importjava.util.Properties;2

3 importorg.apache.ibatis.datasource.DataSourceFactory;4

5 importorg.apache.tomcat.jdbc.pool.DataSource;6 importorg.apache.tomcat.jdbc.pool.PoolProperties;7

8 public class TomcatJDBCPoolDataSourceFactory implementsDataSourceFactory {9

10 privateDataSource dataSource;11

12 publicTomcatJDBCPoolDataSourceFactory(){13 dataSource = newDataSource();14 }15 //setProperties 实例化DataSourceFactory后被调用

16 public voidsetProperties(Properties props) {17 PoolProperties p = newPoolProperties();18 //简化测试,开发中要考虑灵活读取配置

19 p.setUrl(props.getProperty("url"));20 p.setDriverClassName(props.getProperty("driver"));21 p.setUsername(props.getProperty("username"));22 p.setPassword(props.getProperty("password"));23 p.setJmxEnabled(false);24 p.setTestWhileIdle(false);25 p.setTestOnBorrow(true);26 p.setValidationQuery("SELECT 1");27 p.setTestOnReturn(false);28 p.setValidationInterval(30000);29 p.setTimeBetweenEvictionRunsMillis(30000);30 p.setMaxActive(100);31 p.setInitialSize(10);32 p.setMaxWait(10000);33 p.setRemoveAbandonedTimeout(60);34 p.setMinEvictableIdleTimeMillis(30000);35 p.setMinIdle(10);36 p.setLogAbandoned(true);37 p.setRemoveAbandoned(true);38 p.setJdbcInterceptors(39 "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+

40 "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");41 dataSource.setPoolProperties(p);42

43 }44

45 publicDataSource getDataSource() {46

47 returndataSource;48 }49

50 }

配置Mybatis Config

…………………….…………………….

……………………….

…………………………………………………

我们的测试程序,可以看到测试成功

……………………………….

LogFactory.useLog4JLogging();

String resource= "com/jack/mybatis/learn/mybatis-config.xml";

InputStream inputStream=Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);

SqlSession session=sqlSessionFactory.openSession();try{

List persons = session.selectList("com.jack.mybatis.learn.PersonMapper.selectPerson", 101);

System.out.println("--------------Select Start---------------");

System.out.println(persons);

System.out.println("--------------Select End---------------");

}finally{

session.close();

}

…………………………………

6ed8afaeedcd39703fb712b8e31e21ed.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值