- 浏览: 697839 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
本文介绍bbossgroups 持久层框架动态创建、启动、停止和使用多个数据源的方法,直接看代码,欢迎大家一起讨论,有疑问可相互交流。
//启动一个连接池数据源
DBUtil.startPool(dbname, dbdriver, dburl, dbuser, dbpassword,
validationQuery);
//启动一个非连接池数据源
DBUtil.startNoPool(dbname, dbdriver, dburl, dbuser, dbpassword,
validationQuery);
停止数据源:
DBUtil.stopPool(dbname);//停止指定数据源名称
DBUtil.stopPool();//停止默认数据源(poolman.xml中的排在第一个位置的数据源)
通过以下一组接口你可以非常方便地动态创建和管理连接池,包括启动,停止,状态检测,可以根据需要调用相应的启动和创建方法,呵呵
补充说明,bboss数据库类型名称和适配器映射关系:
adapters.put("as400", DBDB2400.class);
adapters.put("db2app", DBDB2App.class);
adapters.put("db2net", DBDB2Net.class);
adapters.put("cloudscape", DBCloudscape.class);
adapters.put("hypersonic", DBHypersonicSQL.class);
adapters.put("interbase", DBInterbase.class);
adapters.put("instantdb", DBInstantDB.class);
adapters.put("mssql", DBMSSQL.class);
adapters.put("mysql", DBMM.class);
adapters.put("oracle", DBOracle.class);
adapters.put("postgresql", DBPostgres.class);
adapters.put("sapdb", DBSapDB.class);
adapters.put("sybase", DBSybase.class);
adapters.put("weblogic", DBWeblogic.class);
adapters.put("axion", DBAxion.class);
adapters.put("informix", DBInformix.class);
adapters.put("odbc", DBOdbc.class);
adapters.put("msaccess", DBOdbc.class);
adapters.put("derby", DBDerby.class);
adapters.put("", DBNone.class);
在应用启动的时候就要加载起来,bboss持久层的使用文档请关注博客中的相关介绍持久层的文章:
http://yin-bp.iteye.com/category/55607
//启动一个连接池数据源
DBUtil.startPool(dbname, dbdriver, dburl, dbuser, dbpassword,
validationQuery);
//启动一个非连接池数据源
DBUtil.startNoPool(dbname, dbdriver, dburl, dbuser, dbpassword,
validationQuery);
停止数据源:
DBUtil.stopPool(dbname);//停止指定数据源名称
DBUtil.stopPool();//停止默认数据源(poolman.xml中的排在第一个位置的数据源)
@Test public void stopPool() { try { DBUtil.stopPool(null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void startPool() { try { DBUtil.getJDBCPoolMetaData(null); DBUtil.startPool(null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testExternalMeta() { try { DBUtil.startPool(null); JDBCPoolMetaData meta = DBUtil.getJDBCPoolMetaData("mq"); JDBCPool pool = DBUtil.getPool("mq"); PoolmanStatic sss = new PoolmanStatic(); TransferObjectFactory.createTransferObject(meta, sss); System.out.println(pool.getStartTime()); System.out.println(pool.getStopTime()); System.out.println(pool.getStatus()); sss.isExternal(); DBUtil.stopPool("bspf"); System.out.println(pool.getStartTime()); System.out.println(pool.getStopTime()); System.out.println(pool.getStatus()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testMeta() { try { DBUtil.startPool(null); JDBCPoolMetaData meta = DBUtil.getJDBCPoolMetaData("bspf"); JDBCPool pool = DBUtil.getPool("bspf"); PoolmanStatic sss = new PoolmanStatic(); TransferObjectFactory.createTransferObject(meta, sss); System.out.println(pool.getStartTime()); System.out.println(pool.getStopTime()); System.out.println(pool.getStatus()); sss.isExternal(); DBUtil.stopPool("bspf"); PreparedDBUtil db = new PreparedDBUtil(); db.preparedSelect("Select 1 from dual"); db.executePrepared(); System.out.println(pool.getStartTime()); System.out.println(pool.getStopTime()); System.out.println(pool.getStatus()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void startstopExterPool() { try { // DBUtil.stopPool("mq"); System.out.println("DBUtil.statusCheck(\"mq\"):"+DBUtil.statusCheck("mq")); System.out.println("DBUtil.statusCheck(\"bspf\"):"+DBUtil.statusCheck("bspf")); System.out.println("DBUtil.statusCheck(\"kettle\"):"+DBUtil.statusCheck("kettle")); DBUtil dbutil= new DBUtil(); try { dbutil.executeSelect("mq", "Select 1 from dual"); System.out.println("dbutil.size():" + dbutil.size()); } catch (Exception e) { e.printStackTrace(); } DBUtil.startPool("mq"); dbutil = new DBUtil(); dbutil.executeSelect("mq","Select 1 from dual"); System.out.println("dbutil.size():" + dbutil.size()); System.out.println("DBUtil.statusCheck(\"mq\"):"+DBUtil.statusCheck("mq")); System.out.println("DBUtil.statusCheck(\"bspf\"):"+DBUtil.statusCheck("bspf")); System.out.println("DBUtil.statusCheck(\"kettle\"):"+DBUtil.statusCheck("kettle")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testStartPool() { TransactionManager tm = new TransactionManager(); try { DBUtil dbutil = new DBUtil(); String name = "db", driver="oracle.jdbc.driver.OracleDriver", jdbcurl="jdbc:oracle:thin:@//172.16.25.219:1521/orcl", username="baseline", password="baseline", readOnly="true", validationQuery="select 1 from dual"; DBUtil.startPool("db", driver, jdbcurl, username, password, readOnly, validationQuery); tm.begin(); dbutil.executeSelect("db","Select 1 from dual"); tm.commit(); System.out.println("dbutil.size():" + dbutil.size()); DBUtil.stopPool("db"); PreparedDBUtil db = new PreparedDBUtil(); db.preparedSelect("db","Select 1 from dual"); db.executePrepared(); // dbutil.executeSelect("db","Select 1 from dual"); } catch(Exception e) { e.printStackTrace(); } } @Test public void testDBStatusStatic() throws SQLException { int numactive = DBUtil.getNumActive("mysql"); int numIdle = DBUtil.getNumIdle("mysql"); DBUtil.getConection("mysql"); List<PoolableConnection> objects = (List<PoolableConnection>)DBUtil.getTraceObjects("mysql"); for(int i = 0; objects != null && i < objects.size(); i ++) { PoolableConnection con = objects.get(i); System.out.println(con.getAutoCommit()); System.out.println(con.toString()); } System.out.println(); // int numactive = DBUtil.getNumActive("bspf"); } @Test public void testStartPoolFromConf() { String configfile = "custom_poolman.xml"; SQLUtil.startPoolFromConf(configfile); DBUtil dbutil = new DBUtil(); try { dbutil.executeSelect("bspf_custom_1","Select * from tableinfo"); System.out.println("bspf_custom_1:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.executeSelect("bspf_custom","Select * from tableinfo"); System.out.println("bspf_custom:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void startPoolFromConf() { String configfile = "custom_poolman.xml"; String dbnamespace = "test"; SQLUtil.startPoolFromConf(configfile,dbnamespace); DBUtil dbutil = new DBUtil(); try { dbutil.executeSelect("test:bspf_custom_1","Select * from tableinfo"); System.out.println("test:bspf_custom_1:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.executeSelect("test:bspf_custom","Select * from tableinfo"); System.out.println("test:bspf_custom:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.stopPool("test:bspf_custom_1"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.stopPool("test:bspf_custom"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void startPoolFromConfWithAllParams() { String configfile = "custom_poolman.xml"; String dbnamespace = "test"; String[] dbnames = new String[]{"bspf_custom_1"}; SQLUtil.startPoolFromConf(configfile,dbnamespace,dbnames); DBUtil dbutil = new DBUtil(); try { dbutil.executeSelect("test:bspf_custom_1","Select * from tableinfo"); System.out.println("test:bspf_custom_1:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.executeSelect("test:bspf_custom","Select * from tableinfo"); System.out.println("test:bspf_custom:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void startPoolFromConfNulldbnamespace() { String configfile = "custom_poolman.xml"; String dbnamespace = null; String[] dbnames = new String[]{"bspf_custom_1"}; SQLUtil.startPoolFromConf(configfile,dbnamespace,dbnames); DBUtil dbutil = new DBUtil(); try { dbutil.executeSelect("bspf_custom_1","Select * from tableinfo"); System.out.println("bspf_custom_1:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { dbutil.executeSelect("bspf_custom","Select * from tableinfo"); System.out.println("bspf_custom:"+dbutil.size()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testStartPoolFromTempate() throws SQLException { DBUtil.getConection(); String poolname = "bspf-custom"; String driver = "org.apache.derby.jdbc.EmbeddedDriver"; String jdbcurl = "jdbc:derby:D:/workspace/bbossgroups-3.1/bboss-mvc/database/cimdb"; String username = ""; String password = ""; String readOnly = "false"; String txIsolationLevel = "READ_COMMITTED"; String validationQuery = "select 1 from dual"; String jndiName = "jdbc/derby-ds-custom"; int initialConnections = 2; int minimumSize = 0; int maximumSize = 10; boolean usepool = true; boolean external = true; String externaljndiName = "jdbc/derby-ds"; boolean showsql = true; SQLUtil.startPool( poolname, driver, jdbcurl, username, password, readOnly, txIsolationLevel, validationQuery, jndiName, initialConnections, minimumSize, maximumSize, usepool, external, externaljndiName , showsql ); }
通过以下一组接口你可以非常方便地动态创建和管理连接池,包括启动,停止,状态检测,可以根据需要调用相应的启动和创建方法,呵呵
DBUtil.stopPool DBUtil.startPool DBUtil.statusCheck DBUtil.startPool("db", driver, jdbcurl, username, password, readOnly, validationQuery); SQLUtil.startPoolFromConf(configfile); SQLUtil.startPoolFromConf(configfile,dbnamespace); SQLUtil.startPoolFromConf(configfile,dbnamespace,dbnames); SQLUtil.startPool( poolname, driver, jdbcurl, username, password, readOnly, txIsolationLevel, validationQuery, jndiName, initialConnections, minimumSize, maximumSize, usepool, external, externaljndiName , showsql );
补充说明,bboss数据库类型名称和适配器映射关系:
adapters.put("as400", DBDB2400.class);
adapters.put("db2app", DBDB2App.class);
adapters.put("db2net", DBDB2Net.class);
adapters.put("cloudscape", DBCloudscape.class);
adapters.put("hypersonic", DBHypersonicSQL.class);
adapters.put("interbase", DBInterbase.class);
adapters.put("instantdb", DBInstantDB.class);
adapters.put("mssql", DBMSSQL.class);
adapters.put("mysql", DBMM.class);
adapters.put("oracle", DBOracle.class);
adapters.put("postgresql", DBPostgres.class);
adapters.put("sapdb", DBSapDB.class);
adapters.put("sybase", DBSybase.class);
adapters.put("weblogic", DBWeblogic.class);
adapters.put("axion", DBAxion.class);
adapters.put("informix", DBInformix.class);
adapters.put("odbc", DBOdbc.class);
adapters.put("msaccess", DBOdbc.class);
adapters.put("derby", DBDerby.class);
adapters.put("", DBNone.class);
评论
8 楼
yin_bp
2012-10-23
在发布的版本中/bestpractices下有个persistent工程就是持久的示例工程
7 楼
yin_bp
2012-10-23
lx13345 写道
custom_poolman.xml这个应该在哪里被加载?
在应用启动的时候就要加载起来,bboss持久层的使用文档请关注博客中的相关介绍持久层的文章:
http://yin-bp.iteye.com/category/55607
6 楼
lx13345
2012-10-23
不用别的框架,就用bboss,该如何?给个完整的例子?
5 楼
lx13345
2012-10-23
需要我手动编写一个类来加载,完成数据源的获取,?
4 楼
lx13345
2012-10-23
或者说,我编写dao的时候,。。。?有些迷茫,
3 楼
lx13345
2012-10-23
custom_poolman.xml这个应该在哪里被加载?
2 楼
yin_bp
2011-06-29
custom_poolman.xml文件的内容:
<?xml version="1.0" encoding="gb2312"?> <poolman> <management-mode>local</management-mode> <datasource> <dbname>bspf_custom</dbname> <loadmetadata>false</loadmetadata> <jndiName>jdbc/mysql-ds</jndiName> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://172.16.25.139:3306/cim</url> <username>root</username> <password>123456</password> <txIsolationLevel>READ_COMMITTED</txIsolationLevel> <nativeResults>true</nativeResults> <poolPreparedStatements>false</poolPreparedStatements> <initialConnections>2</initialConnections> <minimumSize>0</minimumSize> <maximumSize>10</maximumSize> <!--控制connection达到maximumSize是否允许再创建新的connection true:允许,缺省值 false:不允许--> <maximumSoft>false</maximumSoft> <!-- 是否检测超时链接(事务超时链接) true-检测,如果检测到有事务超时的链接,系统将强制回收(释放)该链接 false-不检测,默认值 --> <removeAbandoned>true</removeAbandoned> <!-- 链接使用超时时间(事务超时时间) 单位:秒 --> <userTimeout>50</userTimeout> <!-- 系统强制回收链接时,是否输出后台日志 true-输出,默认值 false-不输出 --> <logAbandoned>true</logAbandoned> <!-- 数据库会话是否是readonly,缺省为false --> <readOnly>false</readOnly> <!-- 对应属性:timeBetweenEvictionRunsMillis the amount of time (in milliseconds) to sleep between examining idle objects for eviction --> <skimmerFrequency>10</skimmerFrequency> <!--对应于minEvictableIdleTimeMillis 属性: minEvictableIdleTimeMillis the minimum number of milliseconds an object can sit idle in the pool before it is eligable for evcition 单位:秒 空闲链接回收时间,空闲时间超过指定的值时,将被回收 --> <connectionTimeout>60</connectionTimeout> <!-- numTestsPerEvictionRun the number of idle objects to examine per run within the idle object eviction thread (if any) 每次回收的链接个数 --> <shrinkBy>5</shrinkBy> <!-- /** * 检测空闲链接处理时,是否对空闲链接进行有效性检查控制开关 * true-检查,都检查到有无效链接时,直接销毁无效链接 * false-不检查,缺省值 */ --> <testWhileidle>true</testWhileidle> <!-- 定义数据库主键生成机制 缺省的采用系统自带的主键生成机制, 外步程序可以覆盖系统主键生成机制 由值来决定 auto:自动,一般在生产环境下采用该种模式, 解决了单个应用并发访问数据库添加记录产生冲突的问题,效率高,如果生产环境下有多个应用并发访问同一数据库时,必须采用composite模式 composite:结合自动和实时从数据库中获取最大的主键值两种方式来处理,开发环境下建议采用该种模式, 解决了多个应用同时访问数据库添加记录时产生冲突的问题,效率相对较低, 如果生产环境下有多个应用并发访问同一数据库时,必须采用composite模式 --> <keygenerate>composite</keygenerate> <!--poolman的日志信息输出改用log4j来输出到日志文件,相关的配置见log4j.properties文件--> <!--<logFile>dbaccess.log</logFile> <debugging>true</debugging>--> <!-- 请求链接时等待时间,单位:秒 客服端程序请求链接等待时间超过指定值时,后台包等待超时异常 --> <maxWait>60</maxWait> <!-- 链接有效性检查sql语句 --> <validationQuery>select 1</validationQuery> <autoprimarykey>false</autoprimarykey> <showsql>false</showsql> </datasource> <datasource> <dbname>bspf_custom_1</dbname> <loadmetadata>false</loadmetadata> <jndiName>jdbc/mysql-ds-1</jndiName> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://172.16.25.139:3306/cim</url> <username>root</username> <password>123456</password> <txIsolationLevel>READ_COMMITTED</txIsolationLevel> <nativeResults>true</nativeResults> <poolPreparedStatements>false</poolPreparedStatements> <initialConnections>2</initialConnections> <minimumSize>0</minimumSize> <maximumSize>10</maximumSize> <!--控制connection达到maximumSize是否允许再创建新的connection true:允许,缺省值 false:不允许--> <maximumSoft>false</maximumSoft> <!-- 是否检测超时链接(事务超时链接) true-检测,如果检测到有事务超时的链接,系统将强制回收(释放)该链接 false-不检测,默认值 --> <removeAbandoned>true</removeAbandoned> <!-- 链接使用超时时间(事务超时时间) 单位:秒 --> <userTimeout>50</userTimeout> <!-- 系统强制回收链接时,是否输出后台日志 true-输出,默认值 false-不输出 --> <logAbandoned>true</logAbandoned> <!-- 数据库会话是否是readonly,缺省为false --> <readOnly>false</readOnly> <!-- 对应属性:timeBetweenEvictionRunsMillis the amount of time (in milliseconds) to sleep between examining idle objects for eviction --> <skimmerFrequency>10</skimmerFrequency> <!--对应于minEvictableIdleTimeMillis 属性: minEvictableIdleTimeMillis the minimum number of milliseconds an object can sit idle in the pool before it is eligable for evcition 单位:秒 空闲链接回收时间,空闲时间超过指定的值时,将被回收 --> <connectionTimeout>60</connectionTimeout> <!-- numTestsPerEvictionRun the number of idle objects to examine per run within the idle object eviction thread (if any) 每次回收的链接个数 --> <shrinkBy>5</shrinkBy> <!-- /** * 检测空闲链接处理时,是否对空闲链接进行有效性检查控制开关 * true-检查,都检查到有无效链接时,直接销毁无效链接 * false-不检查,缺省值 */ --> <testWhileidle>true</testWhileidle> <!-- 定义数据库主键生成机制 缺省的采用系统自带的主键生成机制, 外步程序可以覆盖系统主键生成机制 由值来决定 auto:自动,一般在生产环境下采用该种模式, 解决了单个应用并发访问数据库添加记录产生冲突的问题,效率高,如果生产环境下有多个应用并发访问同一数据库时,必须采用composite模式 composite:结合自动和实时从数据库中获取最大的主键值两种方式来处理,开发环境下建议采用该种模式, 解决了多个应用同时访问数据库添加记录时产生冲突的问题,效率相对较低, 如果生产环境下有多个应用并发访问同一数据库时,必须采用composite模式 --> <keygenerate>composite</keygenerate> <!--poolman的日志信息输出改用log4j来输出到日志文件,相关的配置见log4j.properties文件--> <!--<logFile>dbaccess.log</logFile> <debugging>true</debugging>--> <!-- 请求链接时等待时间,单位:秒 客服端程序请求链接等待时间超过指定值时,后台包等待超时异常 --> <maxWait>60</maxWait> <!-- 链接有效性检查sql语句 --> <validationQuery>select 1</validationQuery> <autoprimarykey>false</autoprimarykey> <showsql>false</showsql> </datasource> <datasource external="true"> <dbname>mq</dbname> <externaljndiName>jdbc/mysql-ds</externaljndiName> <showsql>false</showsql> </datasource> <datasource external="true"> <dbname>kettle</dbname> <externaljndiName>jdbc/mysql-ds</externaljndiName> <showsql>false</showsql> </datasource> </poolman>
1 楼
yin_bp
2011-06-29
欢迎大家一起交流,呵呵
发表评论
-
bboss 持久层数据源引用外部属性配置介绍
2018-12-29 21:47 1099bboss 持久层数据源外部属性配置引用介绍 bboss持久 ... -
bboss持久层开启和关闭自带主键机制
2017-08-17 11:56 755bboss持久层开启和关闭自带主键机制 请访问文档: bbos ... -
bboss高性能db批处理功能使用方法介绍
2017-05-14 21:28 2148bboss持久层在v5.0.3.5中新增简单的高效的db批处理 ... -
bboss持久层公共sql片段定义和引用方法说明
2017-03-03 13:05 1131bboss持久层公共sql片段定义和引用方法说明 在配置sq ... -
最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
2016-12-15 10:24 1366在使用最新的mysql-connector-java 6.0. ... -
持久层快速入门系列一
2016-08-19 13:00 1266持久层快速入门 先在应用中导入bboss 持久层(bboss ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 922首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss 持久层sql xml配置文件编写和加载方法介绍
2016-04-05 13:14 1699bboss 持久层sql xml配置文件编写和加载方法介绍 通 ... -
bboss持久层设置数据库查询fetchsize参数方法
2015-11-06 11:54 1019bboss持久层设置数据库查询fetchsize参数方法 j ... -
bboss持久层快速入门教程
2015-09-19 13:49 1594bboss持久层快速入门教程,快速搭建bboss持久层的开 ... -
bboss持久层数据库适配器编写和注册方法
2015-02-06 15:21 978bboss持久层数据库适配器编写和注册方法 bboss持久层默 ... -
bboss模糊查询、动态sql、批处理资料荟萃
2015-01-30 12:03 2376bboss模糊查询、动态sql、批处理资料荟萃 bboss持 ... -
bboss持久层查询元数据缓存机制开启方法
2014-11-18 12:03 1024bboss持久层为了提升数据库查询操作性能,提供了对查 ... -
bboss开发、模块工程目录结构及功能说明
2014-10-15 19:46 4912基于bboss开发项目说明 ... -
bboss内置数据源apache dbcp与druid数据源切换方法
2014-09-23 09:59 1391bboss内置数据源与druid数据源切换方法 bboss内置 ... -
bboss持久层多数据源配置及多数据库事务控制使用方法
2014-05-11 20:24 2980bboss持久层多数据源配置及使用方法,持久层框架及demo下 ... -
bboss持久层demo使用说明
2014-03-11 09:38 1219持久层案例可以用svn客户端下载eclipse工程,导入ecl ... -
bboss持久层More分页查询API使用介绍
2013-10-18 16:17 1486为了更好地提高数据库分页查询的效率,bboss持久层在Conf ... -
bboss持久层操作Clob和Blob字段示例
2013-09-09 13:29 1232bboss持久层操作Clob和Blob非常方便,基于bboss ... -
bboss持久层ormaping机制详解
2013-09-04 21:04 1161bboss持久层针对db操作即提供了原始sql语句的支持,又提 ...
相关推荐
本DEMO演示了如何在SpringMVC和Mybatis框架中配置多个数据源,并结合Maven进行项目管理,提供了一个实际操作的参考。 首先,我们需要了解SpringMVC和Mybatis的基础。SpringMVC是Spring框架的一部分,主要用于处理...
1. **配置文件设置**:首先,你需要在`applicationContext.xml`或`mybatis-config.xml`中定义多个数据源。通常,我们会使用`org.springframework.jdbc.datasource.DriverManagerDataSource`或`...
总结来说,"springmvc_mybatis_多数据源"项目展示了如何在SpringMVC和MyBatis框架下有效地管理和使用多个数据源。这涉及到Spring的事务管理、数据源路由、MyBatis的配置等多个方面,对于理解和实践企业级应用开发中...
1. **配置数据源**:首先,你需要配置多个数据源,可以使用Spring的AbstractRoutingDataSource作为基础,该类可以根据某种路由策略(如线程本地变量、请求参数等)动态选择数据源。 2. **定义路由逻辑**:创建一个...
在JavaWeb开发中,"动态切换多数据源"是一个重要的技术点,特别是在大型企业级应用中,为了实现数据的高可用性、隔离性和扩展性,往往需要接入多个数据库。本项目是一个基于Eclipse、MyBatis和Mysql的多数据源示例,...
1. **配置Spring**:首先,我们需要在Spring的配置文件中声明多个数据源。这些数据源可以是JDBC的DataSource实例,如Apache的DBCP或C3P0。每个数据源都有其特定的数据库连接信息,例如URL、用户名和密码。 ```xml ...
在多数据源的场景下,我们需要配置多个数据源。例如,上述配置展示了"master"和"cluster"两个数据源,分别对应不同的数据库连接信息。此外,还需要配置Druid连接池的基本参数,如初始化大小、最小连接数、最大连接数...
如果你使用Mybatis作为持久层框架,需要为每个数据源创建单独的`SqlSessionFactory`和`MapperScannerConfigurer`。你可以通过`@MapperScan`注解指定每个数据源对应的Mapper接口包。 4. **切换数据源**: 为了方便...
在现代企业级应用开发中,数据源管理是一个关键部分,特别是在需要访问多个数据库的应用中。SpringBoot、MyBatis和Druid的组合提供了一个高效且灵活的解决方案,尤其是在实现运行时动态多数据源方面。本篇文章将深入...
在SpringMVC+MyBatis的项目中,可以使用Spring的DataSourceTransactionManager来管理多个数据源。首先,需要配置两个数据源,分别为读库和写库。接着,通过@Qualifier注解指定在Service层中使用的具体数据源。 **...
- **Mapper配置**:为每个数据源创建对应的Mapper配置,确保MyBatis知道要使用哪个数据源执行SQL。这可以通过在Mapper接口上添加自定义注解实现,如`@MapperDS("primary")`或`@MapperDS("secondary")`。 - **...
本项目围绕“Java简单分布式架构,多个数据源,线程池多线程访问”这一主题展开,旨在通过利用Java技术栈实现一个高效的分布式系统。 首先,我们关注的是“分布式”这一概念。分布式系统是由多台计算机通过网络连接...
1. **数据源配置**:在Spring配置文件中,我们需要定义多个数据源bean,每个数据源对应一个数据库连接。这可能包括Druid或HikariCP这样的连接池配置。 2. **动态数据源**:Spring的AbstractRoutingDataSource类允许...
此外,`MyBatis` 的 `MapperScannerConfigurer` 或 `@MapperScan` 注解可以扫描并加载所有通用Mapper接口,使得每个数据源都可以使用通用的 CRUD 方法。同时,我们还需要配置 MyBatis 的 SqlSessionFactory 和 ...
在Java开发中,特别是在大型企业级应用中,处理多个数据源和分布式事务是常见的需求。本DEMO展示了如何使用Spring框架、Mybatis持久层框架以及Atomikos事务管理器来实现这一目标。以下是对这个DEMO中涉及的技术点的...
- 配置数据源:在`application.properties`或`application.yml`中,定义多个数据源配置,例如`datasource.primary.url`、`datasource.primary.username`等。 - 自定义路由数据源:创建一个继承自`...
- 配置多个数据源:定义DataSource bean,通过条件注解实现读写分离。 - 配置MyBatis:配置MyBatis的相关bean,包括SqlSessionFactory和MapperScannerConfigurer。 - 配置Swagger:创建Docket bean,定义API的元...
每个数据源对应一个DataSource,SpringBoot可以通过@ConfigurationProperties注解,从application.properties或application.yml文件中读取配置,创建多个数据源。 AOP(Aspect Oriented Programming)面向切面编程...
1. **配置多数据源**:在Spring Boot的配置文件(如`application.yml`)中,定义两个或多个数据源,每个数据源对应不同的数据库连接信息。例如: ```yaml spring: datasource: primary: driver-class-name: ...
为每个数据源创建对应的实体类和仓库接口,例如`PrimaryUser`、`PrimaryUserService`、`PrimaryUserRepository`。 四、配置Mapper 1. 添加MyBatis依赖 如果你使用MyBatis作为持久层框架,确保引入MyBatis和MyBatis...