zoukankan      html  css  js  c++  java
  • 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连接方式是相同的.
    • 这里有一篇的很全面的参数解释:

    (链接)[http://chirs1012f.iteye.com/blog/805261]

    • 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&amp;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

    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); 
      } 
     } 
    }
    
    
  • 相关阅读:
    CSS margin合并
    最大网络流
    js——this
    js——作用域和闭包
    CSS弹性(flexible)盒子
    CSS盒子模型
    修改html中button显示的文字
    远程唤醒UP Board
    UP Board 串口使用心得
    UP Board 网络设置一本通
  • 原文地址:https://www.cnblogs.com/dgwblog/p/7684744.html
Copyright © 2011-2022 走看看