Javaweb配置最全的数据源配置
DBCP
- DBCP是Apache推出的数据库连接池(Database Connection Pool)。 
 操作步骤:
- 添加jar包: 
 commons-dbcp-1.4.jar
 commons-pool-1.5.6.jar
- 添加属性资源文件 
 dbcpconfig.properties文件。
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_user
username=root
password=root
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=utf8
defaultAutoCommit=true
defaultReadOnly=
defaultTransactionIsolation=REPEATABLE_READ
- 编写数据源工具类
public class DBUtil {
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = getDataSource().getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    private static DataSource getDataSource(){
        DataSource dataSource=null;
        Properties p = new Properties();
        try {
            p.load(DBUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
            dataSource = BasicDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            throw new RuntimeException("获取DataSource对象失败");
        }
        return dataSource;
    }
}
C3P0
操作步骤:
- 添加jar包
c3p0-0.9.1.2.jar
- 编写配置文件
 创建一个c3p0-config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/db_user</property>
    <property name="user">root</property>
    <property name="password">root</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
  </default-config>
</c3p0-config>
- 编写数据源工具类
public class DBUtil {
    private static DataSource dataSource = new ComboPooledDataSource();
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}
JavaWeb之Tomcat管理数据源
上面2中方式都需要导入jar包,在JavaWeb服务器Tomcat中其实内置了数据源。所以不需要导入jar包。
Tomcat内置数据源其实也是DBCP,是Tomcat的lib目录下的tomcat-dbcp.jar。
配置数据源的步骤:
- 拷贝数据库连接的jar mysql-connector-java-5.1.7-bin.jar到tomcat/lib目录下 
- 配置数据源XML文件 
<Context>
     <Resource name="jdbc/login_register" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/db_user"/>
</Context>
- 如果是在当前应用的META-INF中创建context.xml,编写数据源,那么只有当前应用可以使用。 
- 使用连接池,封装工具类 
public class DBUtil {
    public static Connection getConnection(){
        Connection conn = null;
        try {
            Context c = new InitialContext();
            DataSource dataSource = (DataSource) c.lookup("java:/comp/env/jdbc/login_register");//这里的jdbc/login_register和篇配置文件中的name属性一致
            conn = dataSource.getConnection();
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return conn;
    }
}
BoneCP
- bonecp 号称比c3p0 dbcp 性能快25倍,主要是因为 bonecp采用了1.5引入的并行包,抛弃了锁机制
- (官方主页)[http://jolbox.com/index.html?page=http://jolbox.com/download.html]
- 这里提供的maven的依赖 ,另为例子用了单机数据库hsqldb ,所以还需要你导入这个包,不过你可以
 用本机的任意一款驱动尝试链接,方式与原始的jdbc连接方式是相同的.
- 这里有一篇的很全面的参数解释:
- maven 依赖
<dependency>
			<groupId>com.jolbox</groupId>
			<artifactId>bonecp</artifactId>
			<version>0.6.5</version>
			<scope>compile</scope>
		</dependency>
	<!-- This is the HSQLDB database in use by this test. Replace with MySQL, PostgreSQL etc here if you wish. -->
		<dependency>
			<groupId>hsqldb</groupId>
			<artifactId>hsqldb</artifactId>
			<version>1.8.0.10</version>
			<scope>compile</scope>
		</dependency>
- jdbc基本代码
public class ExampleJDBC {
	/** Start test
	 * @param args none expected.
	 */
	public static void main(String[] args) {
		BoneCP connectionPool = null;
		Connection connection = null;
		try {
			// load the database driver (make sure this is in your classpath!)
			//替换为mysql等驱动
			Class.forName("org.hsqldb.jdbcDriver");
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
		try {
			// setup the connection pool
			BoneCPConfig config = new BoneCPConfig();
			//链接的地址
			config.setJdbcUrl("jdbc:hsqldb:mem:test"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
			config.setUsername("sa");
			config.setPassword("");
			config.setMinConnectionsPerPartition(5);
			config.setMaxConnectionsPerPartition(10);
			config.setPartitionCount(1);
			connectionPool = new BoneCP(config); // setup the connection pool
			connection = connectionPool.getConnection(); // fetch a connection
			if (connection != null){
				System.out.println("Connection successful!");
				Statement stmt = connection.createStatement();
				ResultSet rs = stmt.executeQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS"); // do something with the connection.
				while(rs.next()){
					System.out.println(rs.getString(1)); // should print out "1"'
				}
			}
			connectionPool.shutdown(); // shutdown connection pool.
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
- 由于现在流行使用ssm 技术 所以提供spring,其他去官方查
<!-- BoneCP configuration -->
<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
   <property name="driverClass" value="com.mysql.jdbc.Driver" />
   <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/yourdb" />
   <property name="username" value="root"/>
   <property name="password" value="abcdefgh"/>
   <property name="idleConnectionTestPeriod" value="60"/>
   <property name="idleMaxAge" value="240"/>
   <property name="maxConnectionsPerPartition" value="30"/>
   <property name="minConnectionsPerPartition" value="10"/>
   <property name="partitionCount" value="3"/>
   <property name="acquireIncrement" value="5"/>
   <property name="statementsCacheSize" value="100"/>
   <property name="releaseHelperThreads" value="3"/>
</bean>
@Component
public class Foo {
@Autowired
DataSource ds;
 public void testBoneCP() throws SQLException {
    Connection connection = ds.getConnection();
    System.out.println(connection); // do something with the connection here..
 }
}
HikariCP
- 技术总是在进步的,大致意思是ps:红色框中的部分意思:虽然BoneCP性能优于老旧的C3PO和DBCP连接池,但是现在应该被舍弃了,以迎接HikariCP
 作者词语之间充满了悲凉之感,好比当年的少年侠客,风流倜傥,如今已是迟暮之年,不得不退出江湖,何其悲凉。
 在笔者胡乱感伤一通过后,那么问题就来了。
- Github主页:(主页)[http://brettwooldridge.github.io/HikariCP/]
 HikariCP是一个高效的数据库连接池。
- 详细的其他方式 请访问 (官方)[https://github.com/brettwooldridge/HikariCP/wiki]
- 限于篇章,下面介绍快速的使用方法
 -下面spring 配置
<!-- HikariCP 高性能数据库连接池 -->
    <bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/black1?useUnicode=true&characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
        <!-- Default settings -->
        <!-- 控制自动提交行为 default:true -->
        <property name="autoCommit" value="true"/>
        <!--连接池获取的连接是否只读 default:false-->
        <property name="readOnly" value="false"/>
        <!--控制连接的事务隔离等级 default:none-->
        <property name="transactionIsolation" value="none"/>
        <!--设置catalog以便于支持查看catalogs , 若不指定的话将直接使用 JDBC driver使用的 default:none-->
        <property name="catalog" value="none"/>
        <!--最大连接超时时间 default:30秒-->
        <property name="connectionTimeout" value="30000"/>
        <!--最大空闲超时时间 default:10分钟   -->
        <property name="idleTimeout" value="600000"/>
        <!--连接池中一个连接的最大生命周期 default:30分钟-->
        <property name="maxLifetime" value="1800000 "/>
        <!--  ...还有一些其他配置属性 有兴趣可以看看 O(∩_∩)O哈哈~ -->
    </bean>
- spring4 的无xml 配置方式
@Configuration
@EnableTransactionManagement
public class AppConfig {
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }
    @Bean
    public HibernateTransactionManager transactionManager() {
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(sessionFactory().getObject());
        return txManager;
    }
    private DataSource dataSource() {
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(100);
        ds.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
        ds.addDataSourceProperty("url", url);
        ds.addDataSourceProperty("user", username);
        ds.addDataSourceProperty("password", password);
        ds.addDataSourceProperty("cachePrepStmts", true);
        ds.addDataSourceProperty("prepStmtCacheSize", 250);
        ds.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
        ds.addDataSourceProperty("useServerPrepStmts", true);
        return ds;
    }
    private Properties hibernateProperties() {
        final Properties properties = new Properties();
       // (Dialect, 2nd level entity cache, query cache, etc.)
        return properties;
    }
}
- Tomcat 数据源配置
<Resource name="jdbc/OracleHikari" auth="Container"
      factory="com.zaxxer.hikari.HikariJNDIFactory"
      type="javax.sql.DataSource"
      minimumIdle="5"
      maximumPoolSize="10"
      connectionTimeout="300000"
      dataSourceClassName="oracle.jdbc.pool.OracleDataSource"
      dataSource.implicitCachingEnabled="true"
      dataSource.user="user"
      dataSource.password="pwd"
      dataSource.url="jdbc:oracle:thin:@orcl_server:1521:orcl"/>
阿里druid
- 为监控而生的数据库连接池!阿里云DRDS(https://www.aliyun.com/product/drds )、阿里巴巴TDDL 连接池powered by Druid https://github.com/alibaba/druid/wiki Druid号称是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
- 属性文件:application.properties(DataSource连接参数)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=1qaz!QAZ
- spring 配置文件
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  init-method="init" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
  <!-- 配置初始化大小、最小、最大 -->
  <property name="initialSize" value="1" />
  <property name="minIdle" value="1" />
  <property name="maxActive" value="10" />
  <!-- 配置获取连接等待超时的时间 -->
  <property name="maxWait" value="10000" />
  <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  <property name="timeBetweenEvictionRunsMillis" value="60000" />
  <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  <property name="minEvictableIdleTimeMillis" value="300000" />
  <property name="testWhileIdle" value="true" />
  <!-- 这里建议配置为TRUE,防止取到的连接不可用 -->
  <property name="testOnBorrow" value="true" />
  <property name="testOnReturn" value="false" />
  <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
  <property name="poolPreparedStatements" value="true" />
  <property name="maxPoolPreparedStatementPerConnectionSize"
   value="20" />
  <!-- 这里配置提交方式,默认就是TRUE,可以不用配置 -->
  <property name="defaultAutoCommit" value="true" />
  <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
  <property name="validationQuery" value="select 1 " />
  <property name="filters" value="stat" />
  <property name="proxyFilters">
   <list>
    <ref bean="logFilter" />
   </list>
  </property>
 </bean>
- 测试类
public class TestMain {
 public static void loadLoggerContext() {
  System.getProperties().put("logback.configurationFile", "./conf/logback.xml");
  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
  StatusPrinter.setPrintStream(System.err);
  StatusPrinter.print(lc);
 }
 public static void main(String[] args) {
  try {
   loadLoggerContext();
   FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("./conf/spring-base.xml"); 
  } catch (Exception e) {
   System.out.println(e);
  }
 }
}
Javaweb配置最全的数据源配置的更多相关文章
- Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)
		转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ... 
- SpringBoot2.0之八 多数据源配置
		在开发的过程中我们可能都会遇到对接公司其他系统等需求,对于外部的系统可以采用接口对接的方式,对于一个公司开发的两个系统,并且知道相关数据库结构的情况下,就可以考虑使用多数据源来解决这个问题.Spri ... 
- 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库
		作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ... 
- Spring Boot之JdbcTemplate多数据源配置与使用
		之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ... 
- spring boot 多数据源配置与使用
		在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文 ... 
- Spring Boot多数据源配置与使用
		在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可.但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库 ... 
- spring boot(12)-数据源配置原理
		本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ... 
- Spring Boot (14) 数据源配置原理
		数据源配置源码 这里截取org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的部分源码,主要介绍Tomcat和Hika ... 
- Spring Boot教程(三十二)多数据源配置与使用
		之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ... 
随机推荐
- 201521123080《Java程序设计》第7周学习总结
			1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码如下 分析: ... 
- 201521123057 《Java程序设计》第2周学习总结
			1. 本章学习总结 本周Java教学主要围绕Java的基本语法展开.在本周的学习中,我了解到了: -Integer的取值范围 -if...else条件式,switch条件式,while循环,break ... 
- PowerBI开发 第四篇:DAX表达式
			DAX 表达式主要用于创建度量列(Measure),度量值是根据用户选择的Filter和公式,计算聚合值,DAX表达式基本上都是引用对应的函数,函数的执行有表级(Table-Level)上下文和行级( ... 
- XML功能
			REF:https://www.baidu.com/link?url=_-UY8rZVAORlesKTth0F7C8LbvXCL4lSwz6vmQVnTEgmT06NFGdoaD9FbuEQhR7xG ... 
- 克隆虚拟机 virtualbox 修改 uuid
			cmd E:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands sethduuid "E:\Program ... 
- JVM菜鸟进阶高手之路一(一次与笨神,阿飞近距离接触修改JVM)
			转载请注明原创出处,谢谢! 今天在JVMPocket群里面看见,阿牛发了一个gc截图,之后ak47截图了特别恐怖,我就觉得好奇,去看看服务情况,截图日志如下 关于jstat命令详情可以参考:https ... 
- bzoj 3212 Pku3468 A Simple Problem with Integers
			3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MB Description You ... 
- Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
			前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ... 
- linux环境下根据文件的某一列进行去重
			momo@ubuntu:~/user/txt$ cat test.txt1 chen nihao2 chen hello3 li nimenhao4 he dajiahao5 li nimenhaom ... 
- ThinkPHP中foreach和volist的区别
			1.foreach标签foreach标签用于循环输出:foreach(name,item,key)name(必须):要输出的数据模板变量item(必须):循环单原变量key(可选):循环的key变量, ... 
