java动态连接数据源。

有没有办法动态连接不同数据库的不同版本?比如。用户输入(地址,端口,用户名,密码,数据库类型。)然后后端根据不同信息连接不同的库。版本不同会有什么问题?

2个回答

baidu_39066396
jack耗爷 谢谢分享,不过不是这个答案。这个是连接已知的数据源,我这边的问题是,连接未知的,就是用户提供的
一年多之前 回复

主要是考虑兼容性问题。
比如有的函数,这个数据库支持,而另一个不支持(row_number是sql server特有的,mysql没有)。或者某个特性,这个版本支持,那个版本不支持(比如cross apply在sql server 2008才支持,以前不支持)。
所以一般来说,应该整个dal层去适配某种版本数据库,而不是直接一套连接字符串就去匹配。
当然,你仅仅是端口、地址、用户名不同,而数据库的软件、版本都相同,那么没事。

baidu_39066396
jack耗爷 谢谢,我这边还在尝试不同数据库的连接,主要就是验证不同版本,使用高版本驱动是否能兼容
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求助:编写java包连接SQL Server数据源
代码如下 //数据库连接类 package cc.dbc; import java.sql.Connection; import java.sql.DriverManager; public class DatabaseConnection{ private static final String DBDRIVER="sun.jdbc.odbc.JdbcOdbcDriver"; private static final String DBURL="jdbc:odbc:Java"; private static final String DBUSER="cc"; private static final String DBPASSWORD="cc"; private DatabaseConnection conn=null; public DatabaseConnection() throws Exception{//在构造方法中进行数据库连接 try{ Class.forName(DBDRIVER);//加载驱动程序 this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库 }catch(Exception e){ throw e;//为了简单,直接抛出异常 } } public Connection getConnection(){//取得数据库连接 return this.conn;//取得数据库连接 } public void close() throws Exception{//数据库关闭操作 if(this.conn!=null){//避免NullPointException try{ this.conn.close();//数据库关闭 }catch(Exception e){//抛出异常 throw e; } } } } javac编译情况: ![图片说明](https://img-ask.csdn.net/upload/201505/07/1430995078_303803.png) 这个是什么问题?
连接数据库生成jpa实体类的java源代码
连接数据库能得到数据库的所有表。表的字段属性注释等都能得到。并且能生成jpa实体类的java源代码
动态切换数据源不能正常切换
在开发双数据源按需切换的时候,发现不能按要求切换数据源。环境是:struts2、spring、Hibernate。源代码如下: 数据源设置类: ``` public class DataSourceSwitcher { public static final String DATA_SOURCE_MASTER = "master"; // 主库 public static final String DATA_SOURCE_SLAVE = "slave"; // 从库 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); /** * 设置数据源 */ public static void setDataSource(String dbName) { contextHolder.set(dbName); } /** * 获取数据源 */ public static String getDataSource() { return (String) contextHolder.get(); } /** * 删除数据源 */ public static void removeDataSource() { contextHolder.remove(); } } ``` 动态切换类: ``` public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { System.out.println("切换数据源到:" + DataSourceSwitcher.getDataSource()); return DataSourceSwitcher.getDataSource(); } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException { return null; } } ``` AOP切面类: ``` @Component @Aspect @Order(0) public class DataSourceAdvice { private static Logger logger = Logger.getLogger(DataSourceAdvice.class); @Before(("@annotation(com.common.DynamicDataSourceAnnotation)")) public void before(JoinPoint point) { try { // 获取数据源 String dataSource = getDataSource(point); // 设置数据源 logger.info("设置数据源" + dataSource); DataSourceSwitcher.setDataSource(dataSource); } catch (Exception e) { logger.error("设置数据源失败..."); logger.error(StringHandleUtils.getExceptionInfo(e)); } } @After("@annotation(com.common.DynamicDataSourceAnnotation)") //后置通知 public void testAfter(JoinPoint point){ try { // 获取数据源 String dataSource = getDataSource(point); // 若数据源不是主库,则清空 if(!DataSourceSwitcher.DATA_SOURCE_MASTER.equals(dataSource)) { logger.error("删除数据源" + dataSource + "成功..."); DataSourceSwitcher.removeDataSource(); } } catch (Exception e) { logger.error("删除数据源失败..."); logger.error(StringHandleUtils.getExceptionInfo(e)); } } @SuppressWarnings("rawtypes") private String getDataSource(JoinPoint point) { String dataSource = DataSourceSwitcher.DATA_SOURCE_MASTER; try{ Class<?> className = point.getTarget().getClass(); String methodName = point.getSignature().getName(); Class[] argClass = ((MethodSignature)point.getSignature()).getParameterTypes(); Method method = className.getMethod(methodName, argClass); if (method.isAnnotationPresent(DynamicDataSourceAnnotation.class)) { DynamicDataSourceAnnotation annotation = method.getAnnotation(DynamicDataSourceAnnotation.class); dataSource = annotation.dataSource(); } }catch(Exception e) { logger.error("获取数据源失败..."); logger.error(StringHandleUtils.getExceptionInfo(e)); } return dataSource; } } ``` 注解类: ``` @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface DynamicDataSourceAnnotation { String dataSource() default DataSourceSwitcher.DATA_SOURCE_MASTER; } ``` 配置文件: ``` <!-- master --> <bean id="master" class="com.common.DataSource"> <property name="driver" value="${master.datasource.driverClassName}" /> <property name="driverUrl" value="${master.datasource.url}" /> <property name="user" value="${master.datasource.username}"/> <property name="password" value="${master.datasource.password}"/> <property name="alias" value="master" /> </bean> <!-- slave --> <bean id="slave" class="com.common.DataSource"> <property name="driver" value="${slave.datasource.driverClassName}" /> <property name="driverUrl" value="${slave.datasource.url}" /> <property name="user" value="${slave.datasource.username}"/> <property name="password" value="${slave.datasource.password}"/> <property name="alias" value="slave" /> </bean> <!-- 配置动态切换数据源 --> <bean id="dataSource" class="com.common.DynamicDataSource"> <property name="defaultTargetDataSource" ref="master"></property> <property name="targetDataSources"> <map key-type="java.lang.Object"> <entry value-ref="master" key="master"></entry> <entry value-ref="slave" key="slave"></entry> </map> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> </props> </property> <property name="packagesToScan" value="com.common.pojo"/> </bean> <!-- 定义事务管理器(声明式的事务) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <aop:aspectj-autoproxy proxy-target-class="true" /> <tx:annotation-driven transaction-manager="transactionManager" /> ``` 使用: Action层: ``` @Action(name = "common") @Component public class CommonAction extends ActionSupport{ @Autowired private CommonService service; public String queryInfo() { List<TradeInfo> list = service.queryInfo(); for(TradeInfo ti : list) { System.out.println("service.queryInfo():" + ti.getName()); } System.out.println("================================"); List<TradeInfo> list2 = service.queryInfo2(); for(TradeInfo ti : list2) { System.out.println("service.queryInfo2():" + ti.getName()); } return "index"; } } ``` Service层: ``` @Service @Transactional(rollbackFor = Exception.class) public class CommonService { @Autowired private CommonDAO commonDAO; @SuppressWarnings("unchecked") @Override @DynamicDataSourceAnnotation(dataSource = DataSourceSwitcher.DATA_SOURCE_MASTER) public List<TradeInfo> queryInfo() throws SystemException { try { String sql = "FROM TradeInfo"; return this.commonDAO.find(sql); } catch (Exception e) { } } @SuppressWarnings("unchecked") @Override @DynamicDataSourceAnnotation(dataSource = DataSourceSwitcher.DATA_SOURCE_SLAVE) public List<TradeInfo> queryInfo2() throws SystemException { try { String sql = "FROM TradeInfo"; return this.commonDAO.find(sql); } catch (Exception e) { } } } ``` Dao层: ``` @Repository public class CommonDao extends HibernateDaoSupport { public List find(String sql) throws SystemException { try { return getHibernateTemplate().find(sql); } catch (DataAccessException e) { } catch (HibernateException e) { } catch (SQLException e) { } return null; } } ``` 测试输出结果: ``` 设置数据源master 切换数据源到:master 删除数据源master成功... service.queryInfo():主数据源 ================================ 设置数据源slave 切换数据源到:slave service.queryInfo()2:主数据源 ``` 从输出信息可以看出数据源并没有成功切换。queryInfo()走的是主数据源;queryInfo()2走的也是主数据源。 调试结果是:第一个方法可以正常切换数据源,第一个方法之后的方法都无法正常切换,获取的连接是第一个方法的连接。 而在Action中用Main方法: ``` public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); CommonAction = (CommonAction ) ctx.getBean("commonAction"); c.queryInfo(); ) ``` 输出结果: ``` 设置数据源master 切换数据源到:master 切换数据源到:master 删除数据源master成功... service.queryInfo():主数据源 ================================ 设置数据源slave 切换数据源到:slave 切换数据源到:slave service.queryInfo()2:从数据源 ``` 从输出信息可以看出数据源按照预期正常切换了。 请问出现这种问题有哪些可能因素影响呢?
spring + hibernate 动态切换数据源
项目用的是struts2 + spring + hibernate,项目的查询基本上用的都是SQL原生查询, 获取连接的方式是用hibernate的session.connection();(如下图所示),现在需要动态 切换数据源,要如何才能改变数据源呢? ![图片说明](https://img-ask.csdn.net/upload/201701/18/1484706178_817129.png)
quartz与mysql使用同一个数据源,请求不到连接
最近在做项目合并 本来的quartz与mysql合并到同一个数据库 我将quartz的DataSource设置为原来的mysql数据源(BoneCP) 在服务器报错 ``` 2020-01-07 11:40:10.163 [schedulerFactoryBean_QuartzSchedulerThread] ERROR [org.quartz.core.ErrorLogger-2460] An error occurred while scanning for the next triggers to fire. org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'springNonTxDataSource.schedulerFactoryBean': java.sql.SQLException: Timed out waiting for a free available connection. at org.quartz.impl.jdbcjobstore.JobStoreCMT.getNonManagedTXConnection(JobStoreCMT.java:168) at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3774) at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTriggers(JobStoreSupport.java:2759) at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:264) Caused by: java.sql.SQLException: Timed out waiting for a free available connection. at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) at org.springframework.scheduling.quartz.LocalDataSourceJobStore$2.getConnection(LocalDataSourceJobStore.java:135) at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:108) at org.quartz.impl.jdbcjobstore.JobStoreCMT.getNonManagedTXConnection(JobStoreCMT.java:165) ... 3 common frames omitted ``` BoneCP设置由原来的2个分区2个最大连接 改为4个分区5个最大连接 还是报这个错 ![图片说明](https://img-ask.csdn.net/upload/202001/08/1578475058_741073.png) 另外 quartz.properties的配置数据源 直接写数据库配置能成功 但是如果写成${}这种形式就不能成功 ``` org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'myDS': java.sql.SQLException: Connections could not be acquired from the underlying database! at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:777) at org.quartz.impl.jdbcjobstore.JobStoreTX.getNonManagedTXConnection(JobStoreTX.java:71) at org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3213) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.manage(JobStoreSupport.java:3836) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.initialize(JobStoreSupport.java:3821) at org.quartz.impl.jdbcjobstore.JobStoreSupport.schedulerStarted(JobStoreSupport.java:688) at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:580) at org.quartz.impl.StdScheduler.start(StdScheduler.java:142) at org.springframework.scheduling.quartz.SchedulerFactoryBean$1.run(SchedulerFactoryBean.java:708) Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) at org.quartz.utils.PoolingConnectionProvider.getConnection(PoolingConnectionProvider.java:247) at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:108) at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:774) ... 8 common frames omitted Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) ... 12 common frames omitted ```
Hive 使用java代码获取数据源的时候报错求大神解决(jndi)
**Hive 使用jndi方式已经在tomcat配置文件中配置好 **这个是异常信息** javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial     at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)     at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)     at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)     at javax.naming.InitialContext.lookup(InitialContext.java:411)     at sunline.hive.utils.HiveJNDI.getConnection(HiveJNDI.java:29)     at sunline.hive.utils.HiveJNDI.main(HiveJNDI.java:37) **这个是java代码(我想在java代码中获取数据源)** import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class HiveJNDI {     public static Connection getConnection()throws Exception{           /*Properties properties=new Properties();         properties.setProperty("java.naming.factroy.initial","org.jnp.interfaces.NamingContextFactory");         properties.setProperty("java.naming.provider.url", "localhost:8080");*/         InitialContext context = new InitialContext();         DataSource envCtx = (DataSource) context.lookup("java:comp/env/hive/datasource");                                      return envCtx.getConnection();     }     public static void main(String[] args) {         try {             Statement state = getConnection().createStatement();             String sql="select*from tmp_ods_web_vhlclm_ic";             ResultSet query = state.executeQuery(sql);             while(query.next()){                 System.out.println(query.getString(1));             }         } catch (SQLException e) {                          e.printStackTrace();         } catch (Exception e) {                          e.printStackTrace();         }     } } **这个是tomcat 配置文件代码(这里因为我需要连接mysql数据源,与hive数据源,两个同时配置是否会有影响?name不同即可吗?)** <Resource url="jdbc:hive2://10.6.36.147:10000/answernbigdata"                  driverClassName="org.apache.hive.jdbc.HiveDriver"                   password="hive"                username="hive"                 maxWait="10000"                 maxIdle="30"                 maxActive="100"                 type="javax.sql.DataSource"                 auth="Container"                 name="hive/datasource"/>
java-spring配置数据源自动关闭
在使用spring 管理cp30数据源的时候, 建了个BaseDAO 用于创建hinetnatefactory的session对象 发现BaseDAO在初始时是可以创建session对象的 但是再次调用时数据源关闭了,无法继续使用session 请问是什么原因 public class BaseDAO { private SessionFactory sessionFactory; private DataSource datasource; public DataSource getDatasource() { return datasource; } public void setDatasource(DataSource datasource) { System.out.println("datasource--"+datasource.toString()); this.datasource = datasource; } public SessionFactory getSessionFactory(){ System.out.println("get SessionFactory---"+sessionFactory); return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory){ System.out.println("sessionFactory--"+sessionFactory.toString()); //上面是有sessionFatory对象的 this.sessionFactory=sessionFactory; } public Session getASession(){ System.out.println("session dd " + this.datasource);//这里的datasource为null了 Session session=sessionFactory.openSession();//这里的sessionFactory为null return session; } 以下为applicationContext.xml 配置 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" > <property name="driverClass"> <value>com.mysql.jdbc.Driver</value> </property> <property name="jdbcUrl"> <value>jdbc:mysql://localhost:3306/ma</value> </property> <property name="user"> <value>root</value> </property> <property name="password"> <value>root</value> </property> <property name="maxPoolSize"> <value>40</value> </property> <property name="minPoolSize"> <value>10</value> </property> <property name="initialPoolSize"> <value>10</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property> <property name="mappingResources"> <list> <value>com/hibernate/shop/bean/User.hbm.xml</value> </list> </property> <bean id="baseDAO" class="com.hibernate.shop.factory.BaseDAO" scope="singleton"> <property name="sessionFactory" ref="sessionFactory"/> <property name="datasource" ref="dataSource"/> </bean> 十分不解~ 谢谢~谢谢~
Java统计分析,数据源的问题
现在有一个mybatis+spring的 项目有问题: 已经存在一个项目,里面有很多数据, 我们想做数据分析,让后将分析的数据 存放到另一个数据库中。 问题是 这样的会有统计分析中会存在两个数据库的连接,这样配置之后混着两套包, 在同一个系统中,![图片说明](https://img-ask.csdn.net/upload/201506/29/1435569449_296986.jpg) 感觉这样很不科学。。。有没有朋友,推荐个好的解决方案。谢了
怎么从java.sql.connection中获取连接数库的密码
Connection是从tomcat的jndi数据源中获取的,但是需要从connection获取连接数据库使用的密码执行一些操作,connnection的metadata信息中有获取连接数据库的url,用户名,就是没有数据库密码,怎么样可以获得啊?
java数据库连接池内存泄漏
最近进行编程的时候项目上线了,可是查询不了几次就发现出现连接池获取不到连接,我把连接池已经调到1000了,可是还是出现这种问题。所以怀疑我的数据库连接写的时候有问题,还请各位大神帮忙看看是怎么回事。 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class DBDAO { public static Connection getCon(){ Connection conn=null; try{ Context context = new InitialContext(); //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); /*String url="jdbc:sqlserver://localhost:1433;DatabaseName=cx"; String user="sa"; String password="123456"; Connection conn= DriverManager.getConnection(url,user,password);*/ //获得数据源 Context envctx = (Context) context.lookup("java:comp/env"); DataSource ds = (DataSource) envctx.lookup("jdbc/DB"); //获取连接 conn = ds.getConnection();} catch (Exception e) { e.printStackTrace(); } return conn; } //查询语句 public static ResultSet executeQuery(String sql) throws SQLException { Connection con = getCon(); java.sql.Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); return rs; } public static ResultSet executeQuery(String sql, Object... obj) { ResultSet rs =null; try{ Connection con = getCon(); PreparedStatement pstmt = con.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { pstmt.setObject(i + 1, obj[i]); } rs = pstmt.executeQuery(); } catch (Exception e) { e.printStackTrace(); } return rs; } //执行增删改 public static ResultSet executeNonSelect(String sql) throws SQLException { Connection con = getCon(); Statement stmt = con.createStatement(); return stmt.executeQuery(sql); } public static void executeNonReturn(String sql) { Connection con=null; Statement stmt=null; try{ con= getCon(); stmt= con.createStatement(); stmt.execute(sql); if(stmt!=null)stmt.close(); if(con!=null)con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(stmt!=null) try { stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(con!=null) try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }} 我调用的函数是这样写的 public static List<Xsbkb> getStudyCourse(String openid) { // TODO Auto-generated method stub ArrayList<Xsbkb> bkbs =new ArrayList<Xsbkb>(); if(null==openid)return null; ResultSet rs=DBDAO.executeQuery("select * from buser,xsbkb where openid=? and xh=username and xksj='2016-03-01 00:00:00' ",openid); try { if(!rs.next())return null; do{ Xsbkb bkb=new Xsbkb(); bkb.setXh(rs.getString("xh" + "")); bkb.setXm(rs.getString("xm")); bkb.setSjh(rs.getString("Sjh")); bkb.setKcmc(rs.getString("kcmc")); if(rs.getString("bz")!=null){ bkb.setBz(rs.getString("bz")); } bkbs.add(bkb); }while(rs.next()); if(rs!=null) rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(rs!=null) try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("==================="+bkbs.size()); return bkbs; } 我都关闭了连接 怎么还是出现获取不到连接呢
java 连接其它电脑access 实例
1:首先我通过配置ODBC数据源进行连接: String url="jdbc:odbc:lyjtest"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection(url,"",""); stmt = conn.createStatement(); 第一次是可以连接,但第二次运行后,就总是报错(如下所示): [Microsoft][ODBC Microsoft Access Driver] 不能使用 '(未知的)';文件已在使用中。 并且每次运行前都是配置下ODBC数据源,所以很是烦恼。 2:在网上查看资源利用RmiJdbc.JAR包,来通过IP地址的方式还操作access数据库 Class.forName("org.objectweb.rmijdbc.Driver").newInstance(); String strurl = "jdbc:rmi://19.104.24.205/jdbc:odbc:lyjtest"; java.sql.Connection c = DriverManager.getConnection(strurl, "", ""); 又报如下错误ERROR: java.rmi.ConnectException: Connection refused to host: 19.104.24.205; nested exception is: java.net.ConnectException: Connection refused: connect 麻烦哪位大拿帮助解决下。。
spring quartz数据源的问题
spring中配置了两个数据源:一个是默认的dataSource;另一个是dataSourceShare. 配置了两个spring quartz定时器,每个定时器分别要操作不同的数据源对应的数据库中的UserInfo表 各自的service和dao中也是分别注入的各自的datasource,但是连接的时候总是操作的是默认的dataSource数据源。 求高手帮忙啊
启动tomcat时不能创建数据源连接池
严重: Unable to create initial connections of pool. java.sql.SQLException: Driver:com.mysql.jdbc.Driver@13b3b2e returned null for URL:jdbc:mysql:localhost:3306/sns?useUnicode=true&characterEncoding=UTF-8 at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:296) at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635) at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486) at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144) at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554) at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242) at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) at org.apache.naming.NamingContext.lookup(NamingContext.java:842) at org.apache.naming.NamingContext.lookup(NamingContext.java:153) at org.apache.naming.NamingContext.lookup(NamingContext.java:830) at org.apache.naming.NamingContext.lookup(NamingContext.java:167) at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1091) at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:670) at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:269) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
关于JBOSS AS7 多个数据源配置问题
我在JBOSS7的standalone.xml配置文件中配置了两个数据源,JAVA代理连接第一数据源能否正常连接,并能否正常访问到数据库的数据,但连接另外一个数据源时就报错,报错信息:ARJUNA012140: Adding multiple last resources is disallowed. Trying to add LastResourceRecord 我使用的JDBC连接。 请各位大侠帮忙指点下,多个数据源在JBOSS7如何使用,谢谢! 具体配置和代码如下: standalone.xml数据源配置: <subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource jndi-name="java:jboss/datasources/PTKtestDS" pool-name="PTKtestDS" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@134.111.9.81:1521:myoracle</connection-url> <driver>oracle</driver> <security> <user-name>ptkintf</user-name> <password>abc_110</password> </security> </datasource> <datasource jndi-name="java:jboss/datasources/FeeDS" pool-name="FeeDS" enabled="true" use-java-context="true"> <connection-url>jdbc:oracle:thin:@134.111.10.156:1521:feeoracle</connection-url> <driver>oracle</driver> <security> <user-name>feeintf</user-name> <password>fee_intf_07657</password> </security> </datasource> <drivers> <driver name="oracle" module="com.oracle.ojdbc14"> <driver-class>oracle.jdbc.OracleDriver</driver-class> <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> JAVA代码: public class MyEjb3LocalImpl implements MyEjb3Intf{ @Override public String callMyejb3(String str) { queryPTKDbTest(); queryFeeDbTest(); return "SUCCESS"; } private void queryPTKDbTest(){ Connection conn = null; Statement stmt = null; ResultSet rs = null; try{ DataSource dataSource = (DataSource)ContextUtil.getBean("java:jboss/datasources/PTKtestDS"); conn = dataSource.getConnection();; stmt = conn.createStatement(); String sql = "select t.province, t.area_name from area t where t.area_code = '0591'"; rs = stmt.executeQuery(sql); if(rs.next()){ System.out.println(rs.getString("province")); System.out.println(rs.getString("area_name")); } }catch(SQLException e){ e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } private void queryFeeDbTest(){ Connection conn = null; Statement stmt = null; ResultSet rs = null; try{ DataSource dataSource = (DataSource)ContextUtil.getBean("java:jboss/datasources/FeeDS"); conn = dataSource.getConnection();; stmt = conn.createStatement(); String sql = "select t.CZ_NBR, t.CZ_AMOUNT from bill_591.sms_notify t where t.CZ_TIME > (sysdate - 5/24/60/60)"; rs = stmt.executeQuery(sql); if(rs.next()){ System.out.println(rs.getString("CZ_NBR")); System.out.println(rs.getInt("CZ_AMOUNT")); } }catch(SQLException e){ e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 报错信息: 09:46:30,107 WARN [com.arjuna.ats.arjuna] (EJB default - 1) ARJUNA012140: Adding multiple last resources is disallowed. Trying to add LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@3b96bb[connectionListener=1fe0dcb connectionManager=24e39f warned=false currentXid=< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff8682fe53:-4a97a196:541b8af0:c, node_name=1, branch_uid=0:ffff8682fe53:-4a97a196:541b8af0:12, subordinatenodename=null, eis_name=unknown eis name >])), but already have LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@ca677f[connectionListener=15c90f4 connectionManager=360733 warned=falsecurrentXid=< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff8682fe53:-4a97a196:541b8af0:c, node_name=1, branch_uid=0:ffff8682fe53:-4a97a196:541b8af0:11, subordinatenodename=null, eis_name=unknown eis name >])) 09:46:30,123 ERROR [stderr] (EJB default - 1) java.sql.SQLException: javax.resource.ResourceException: IJ000457: Unchecked throwable in managedConnectionReconnected() cl=org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@1fe0dcb[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@1826710 connection handles=0 lastUse=1411091190123 trackByTx=false pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@3c8087 pool internal context=SemaphoreArrayListManagedConnectionPool@eec35c[pool=FeeDS] xaResource=LocalXAResourceImpl@3b96bb[connectionListener=1fe0dcb connectionManager=24e39f warned=false currentXid=null] txSync=null] 09:46:30,123 ERROR [stderr] (EJB default - 1) at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:137) 09:46:30,123 ERROR [stderr] (EJB default - 1) at com.ptk.impl.MyEjb3LocalImpl.queryFeeDbTest(MyEjb3LocalImpl.java:75) 09:46:30,123 ERROR [stderr] (EJB default - 1) at com.ptk.impl.MyEjb3LocalImpl.callMyejb3(MyEjb3LocalImpl.java:21) 09:46:30,123 ERROR [stderr] (EJB default - 1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 09:46:30,123 ERROR [stderr] (EJB default - 1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 09:46:30,123 ERROR [stderr] (EJB default - 1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 09:46:30,123 ERROR [stderr] (EJB default - 1) at java.lang.reflect.Method.invoke(Method.java:597) 09:46:30,123 ERROR [stderr] (EJB default - 1) at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) 09:46:30,123 ERROR [stderr] (EJB default - 1) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 09:46:30,123 ERROR [stderr] (EJB default - 1) at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 09:46:30,123 ERROR [stderr] (EJB default - 1) at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36)
我用java程序向数据库中添加一条记录,提示成功 在数据库中并没有
我用java程序向本地的sql server 2000中添加一条记录,java控制台提示成功![图片说明](https://img-ask.csdn.net/upload/201702/04/1486204123_720929.png)但是用查询分析器select之后并没有这条记录。![图片说明](https://img-ask.csdn.net/upload/201702/04/1486204135_406053.png)把这个sql语句直接输入在查询分析器中就可以显示出来,问一下大神们这是怎么回事 连接用的是jdbc-odbc的方式! 以下是代码 ``` /* * 演示使用jdbc-odbc桥连方式操作数据库luoyedb1(emp,dept) * 1.配置数据源 */ package com.test1; import java.sql.*; public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Connection ct=null; Statement sm=null; try{ // 1.加载驱动(作用是把需要的驱动程序加入内存) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 2.得到连接(指定连接到哪个数据源,用户名和密码) //如果配置数据源的时候,选择的是windows NT验证,则不需要输入用户名和密码 ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","07247857"); // 3.创建Statement或者preparedStatement //Statement主要是发送sql语句 通道 sm=ct.createStatement(); // 4.执行(crud,创建数据库,备份。。) //添加一条数据dept表 //executeUpdate可以执行添加删除修改 int i=sm.executeUpdate("insert into dept values('80','aaa','bbb')"); if(i==1) { System.out.println("添加成功!"); }else{ System.out.println("添加失败!"); } }catch(Exception e){ e.printStackTrace(); }finally{ //关闭资源!!! //关闭顺序是,谁后创建则先关闭 try { //为了程序健壮 if(sm!=null) { sm.close(); } if(ct!=null) { ct.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ```
关于spring+hibernate配置多数据源的问题
我的项目是个webservice项目,使用了hibernate+spring框架,由于项目中要用到两个数据库(都是oracle数据库),我在网上查了一些资料,但是在我的项目中做数据源切换的时候总是切换不过去,也就是说只能连接默认的数据源,一下是我的spring配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <context:annotation-config /> <!-- AXIS2通过该对象加载spring中的bean 固定配置 --> <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /> <!-- end --> <!-- AXIS2本地业务配置 --> <bean id="PAPWebService" class="com.pap.ws.PAPWebService" /> <!-- end --> <context:component-scan base-package="com.pap"> <context:include-filter type="regex" expression=".dao.impl.*" /> <context:include-filter type="regex" expression=".serviec.impl.*" /> <context:include-filter type="regex" expression=".entity.*" /> </context:component-scan> <bean id="tmsDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="driverUrl" value="jdbc:oracle:thin:@172.17.30.80:1521:tms" /> <property name="user" value="SELFSERVICE" /> <property name="password" value="Password123" /> <!-- 最大数据库连接数 --> <property name="maximumConnectionCount" value="100" /> <!-- 最小数据库连接数 --> <property name="minimumConnectionCount" value="3" /> <!-- 最少保持的空闲连接数(默认2个) --> <property name="prototypeCount" value="3" /> <!-- 没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 --> <!-- <property name="maximumNewConnections" value="20"/> --> <!-- 最大的并发连接数 --> <property name="simultaneousBuildThrottle" value="50" /> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒 --> <property name="houseKeepingSleepTime" value="10000" /> <!-- 用于保持连接的测试语句 --> <property name="houseKeepingTestSql" value="select sysdate from dual" /> <!-- 在使用之前测试 --> <property name="testBeforeUse" value="true" /> </bean> <bean id="hisDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="driverUrl" value="jdbc:oracle:thin:@172.17.1.252:1521:ORCL" /> <property name="user" value="system" /> <property name="password" value="aaaaaa" /> <!-- 最大数据库连接数 --> <property name="maximumConnectionCount" value="100" /> <!-- 最小数据库连接数 --> <property name="minimumConnectionCount" value="3" /> <!-- 最少保持的空闲连接数(默认2个) --> <property name="prototypeCount" value="3" /> <!-- 没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 --> <!-- <property name="maximumNewConnections" value="20"/> --> <!-- 最大的并发连接数 --> <property name="simultaneousBuildThrottle" value="50" /> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒 --> <property name="houseKeepingSleepTime" value="10000" /> <!-- 用于保持连接的测试语句 --> <property name="houseKeepingTestSql" value="select sysdate from dual" /> <!-- 在使用之前测试 --> <property name="testBeforeUse" value="true" /> </bean> <bean id="dynamicDataSource" class="com.pap.datasource.DynamicDataSource"> <!-- 通过key-value的形式来关联数据源 --> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="tmsDataSource" key="tmsDataSource"></entry> <entry value-ref="hisDataSource" key="hisDataSource"></entry> </map> </property> <property name="defaultTargetDataSource" ref="tmsDataSource"> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dynamicDataSource" /> <property name="packagesToScan"> <list> <value>com.pap.entity</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> --> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> </beans> 下面是我写的两个用于切换数据源的类: DataSourceContextHolder.java package com.pap.datasource; public class DataSourceContextHolder { public static final String DATA_SOURCE_TMS = "tmsDataSource"; public static final String DATA_SOURCE_HIS = "hisDataSource"; private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setDataSourceType(String customerType) { contextHolder.set(customerType); } public static String getDataSourceType() { return contextHolder.get(); } public static void clearDataSourceType() { contextHolder.remove(); } } DynamicDataSource.java package com.pap.datasource; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDataSourceType(); } } dao层代码 package com.pap.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.criterion.DetachedCriteria; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.pap.dao.BaseDao; @Repository("baseDao") public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao{ @Override public <T> Serializable save(T entity) throws Exception { Serializable s = this.getHibernateTemplate().save(entity); return s; } @Override public <T> void update(T entity) throws Exception { this.getHibernateTemplate().update(entity); } @SuppressWarnings("unchecked") @Override public <T> List<T> query(String hql,Object[] values) throws Exception { return this.getHibernateTemplate().find(hql, values); } @Override public <T> List<T> query(String hql, Object value) throws Exception { return query(hql, new Object[]{value}); } @Override public <T>T getEntity(Class<T> entityClass, Serializable id) throws Exception { return this.getHibernateTemplate().get(entityClass, id); } @SuppressWarnings("unchecked") @Override public <T> List<T> find(DetachedCriteria detachedCriteria, int firstResult, int maxResults) throws Exception { return getHibernateTemplate().findByCriteria(detachedCriteria, firstResult, maxResults); } @Override @SuppressWarnings("unchecked") public <T> List<T> find(DetachedCriteria criteria) throws Exception { return getHibernateTemplate().findByCriteria(criteria); } } service层代码,我是在这里做的数据源切换 package com.pap.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.pap.dao.BaseDao; import com.pap.datasource.DataSourceContextHolder; import com.pap.entity.ChargeTypeDict; import com.pap.entity.ClinicForRegist; import com.pap.entity.MedicalCard; import com.pap.entity.Patient; import com.pap.entity.SelfTerminal; import com.pap.entity.TransactionRecord; import com.pap.entity.User; import com.pap.service.BaseService; @Service @Transactional(propagation = Propagation.REQUIRED) public class BaseServiceImpl implements BaseService { @Resource private BaseDao baseDao; /** * 查询排号信息 */ @Override public List<ClinicForRegist> queryClinicForRegist(java.sql.Date clinicDate, Object[] timeDesc, int firstResult, int maxResults) throws Exception { DataSourceContextHolder.setDataSourceType(DataSourceContextHolder.DATA_SOURCE_HIS); DetachedCriteria detachedCriteria = DetachedCriteria.forClass(ClinicForRegist.class); detachedCriteria.add(Restrictions.eq("clinicDate", clinicDate)); detachedCriteria.add(Restrictions.in("timeDesc", timeDesc)); List<ClinicForRegist> list = baseDao.find(detachedCriteria, firstResult, maxResults); DataSourceContextHolder.clearDataSourceType(); return list; } } webservice接口类 package com.pap.ws; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.log4j.Logger; import com.pap.entity.ChargeTypeDict; import com.pap.entity.ClinicForRegist; import com.pap.entity.ClinicIndex; import com.pap.entity.DeptDict; import com.pap.entity.MedicalCard; import com.pap.entity.Patient; import com.pap.entity.Privileges; import com.pap.entity.Response; import com.pap.entity.SelfTerminal; import com.pap.entity.TransactionRecord; import com.pap.entity.User; import com.pap.service.BaseService; import com.pap.util.MD5Util; public class PAPWebService { @Resource BaseService baseService; /** * 查询可挂号信息 * @param firstResult 起始条数 * @param maxResults 最大条数 * @return */ public Response queryClinicRegist(int firstResult, int maxResults) { Response response = new Response(); try { Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); String[] timeDesc = null; if (8 < hour && hour < 12) { timeDesc = new String[] { "白天", "上午", "下午", "昼夜" }; } else if (hour > 11 && hour < 18) { timeDesc = new String[] { "白天", "下午", "昼夜" }; } else { timeDesc = new String[] {"昼夜" }; } List<ClinicForRegist> list = baseService.queryClinicForRegist(new java.sql.Date(calendar.getTimeInMillis()), timeDesc, firstResult, maxResults); if(list.size() > 0){ response.setResult("S"); response.setArrayData(list); }else{ response.setResult("F"); response.setResult("没有查询到记录"); } } catch (Exception e) { e.printStackTrace(); response.setResult("F"); response.setErrorInfo(e.getMessage()); } return response; } public void setClinicForRegist(ClinicForRegist clinicForRegist){ } public void setClinicIndex(ClinicIndex clinicIndex){ } public void setDeptDict(DeptDict deptDict){ } }
springboot2.1.4 + jpa + hibernate 使用aop注解形式实现多数据源管理 可能懒加载出现问题求大神解答
最近项目中使用springboot2.1.4 + jpa + hibernate 使用aop注解形式实现多数据源管理,用的就是网上大多数人使用的一套代码,但是我在项目中使用后发现如果配置 spring配置文件 application.yml 中open-in-view: false 跨数据源查询正常,但是保存或者修改失败原因是事务没有提交,一旦把open-in-view改成true则不能跨数据源查询,修改保存正常事务正常提交求解,具体代码如下实现 1. application.yml ``` spring: ## 数据库配置 #datasource: #driver-class-name: com.mysql.jdbc.Driver #url: jdbc:mysql://192.168.101.125:3306/cdv?useSSL=false&characterEncoding=utf-8 #username: root #password: 123456 #url: jdbc:mysql://127.0.0.1:3306/boot-jpa-back-sys2?useSSL=false&characterEncoding=utf-8 #username: root #password: datasource: test1: driver-class-name: com.mysql.jdbc.Driver jdbc-url: jdbc:mysql://192.168.101.125:3306/cdv?useSSL=false&characterEncoding=utf-8 username: root password: 123456 type: com.alibaba.druid.pool.DruidDataSource test2: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc-url: jdbc:sqlserver://192.168.101.125:1433;database=Test; username: sa password: Zqvideo123 type: com.alibaba.druid.pool.DruidDataSource ## jpa配置 jpa: show-sql: true hibernate: #ddl-auto: update properties: hibernate.dialect: com.common.mysql.MySQLDialectUTF8 hibernate.format_sql: false open-in-view: false ``` DataSourceAsepct ``` package com.common.db; import java.lang.reflect.Method; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Aspect @Component @Order(0) public class DataSourceAsepct { //加载数据源 @Pointcut("@annotation(com.common.db.DataSourceSet)") // @AfterThrowing(pointcut="@annotation(com.common.db.DataSource)", throwing= "error") public void pointCut(){ } @Before("pointCut()") public void before(JoinPoint joinPoint) { Object target = joinPoint.getTarget(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); DataSourceEnum dataSource = DataSourceEnum.DEFAULT; try { Method method = target.getClass().getMethod(signature.getName(), signature.getParameterTypes()); if (method.isAnnotationPresent(DataSourceSet.class)) { DataSourceSet annotation = method.getAnnotation(DataSourceSet.class); dataSource = annotation.value(); } } catch (NoSuchMethodException e) { e.printStackTrace(); } //实现aop切换数据源 System.out.println("aop切换数据源:" + dataSource.getName()); DataSourceHolder.setDataSource(dataSource); } // @After("pointCut()") @AfterThrowing(pointcut="@annotation(com.common.db.DataSourceSet)", throwing= "error") public void after() { DataSourceHolder.clearDataSource(); String v = DataSourceHolder.getDataSource(); System.out.println(v); } } ``` DataSourceConfig ``` package com.common.db; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.jta.JtaTransactionManager; @Configuration public class DataSourceConfig { //连接数据库db1 @Bean("test1") @ConfigurationProperties("spring.datasource.test1") public DataSource test1() { return DataSourceBuilder.create().build(); } //连接数据库db2 @Bean("test2") @ConfigurationProperties("spring.datasource.test2") public DataSource test2() { return DataSourceBuilder.create().build(); } @Bean("dynamicDataSource") @Primary public DataSource dynamicDataSource() { DynamicDataSource dataSource = new DynamicDataSource(); dataSource.setDefaultTargetDataSource(test1()); Map<Object, Object> dataSourceMap = new HashMap<>(2); dataSourceMap.put(DataSourceEnum.TEST1.getName(), test1()); dataSourceMap.put(DataSourceEnum.TEST2.getName(), test2()); dataSource.setTargetDataSources(dataSourceMap); return dataSource ; } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dynamicDataSource()); } } ``` DataSourceEnum ``` package com.common.db; import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor @Getter public enum DataSourceEnum { DEFAULT("test1"), TEST1("test1"), TEST2("test2"); private String name; } ``` DataSourceHolder ``` package com.common.db; public class DataSourceHolder { private static final ThreadLocal<String> DS_HOLDER = new ThreadLocal<>(); public static void setDataSource(DataSourceEnum dataSource) { DS_HOLDER.set(dataSource.getName()); } public static String getDataSource() { return DS_HOLDER.get(); } public static void clearDataSource() { DS_HOLDER.remove(); } } ``` DataSourceSet ``` package com.common.db; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @Documented public @interface DataSourceSet { //枚举 DataSourceEnum value(); } ``` DynamicDataSource ``` package com.common.db; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { //基于aop切换数据源 System.out.println("dynamic datasource 切换数据源" + DataSourceHolder.getDataSource()); return DataSourceHolder.getDataSource(); } } ``` 测试调用 ``` server层 @Override @DataSourceSet(DataSourceEnum.TEST1) public String test1(Long id) { String s = programRepository.findids(id); System.out.println(s); return s; } @Override @DataSourceSet(DataSourceEnum.TEST2) public String test2(Long id) { String s = testRepository.findids1(id); System.out.println(s); return s; } ``` ``` Controller层 @PostMapping("/test") @ResponseBody public ResultVo test(Long id) { id = 1l; String beProgram1 = programService.test1(id); System.out.println(222); id=2l; String beProgram = testService.test2(id); System.out.println(333); return ResultVoUtil.success(beProgram+beProgram1); } ```
怎样用java做学生管理系统实现与数据库的连接
学生信息管理系统 (一)系统功能基本要求: (1)具有用户登录功能。 (2)具有学生信息的录入功能。 (3)具有数据查询功能,可以实现查询全部信息和按条件执行查询。 (4)具有按条件删除数据功能。 (二)其它要求: (1) 只能使用Java语言,采用面向接口的编程方式,分层设计和封装,要求源程序要有适当的注释,使程序容易阅读。 (2)程序必须与数据库进行连接。 (3) 学生可根据自身情况酌情增加新功能(视情况可另外加分)。 (4) 独立完成课程设计,并完成课程设计报告,报告应记录设计的过程,尤其是分析/设计/实现过程中的决策。
求高人指点:java和sql2008连接不上,有什么办法能解决?
这是连接数据库的代码: package file; import java.sql.*; public class Temp_to_connection_db { private Connection con=null; private Statement st=null; private String url,userName,password; private boolean flag=true; public Temp_to_connection_db() { url="jdbc:odbc:java"; userName="sa"; password="123456"; } public boolean getFlag() { return flag; } public void close() { try { st.close(); con.close(); } catch(Exception e) { } } public void reTry() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); System.out.print("--------------"); con = DriverManager.getConnection(url, userName, password); flag=true; } catch(Exception e) { System.out.print(e.getMessage()); flag=false; } } } 这是错误: [ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me a few
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试一个ArrayList我都能跟面试官扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问

相似问题

1
使用springcloud 和 连接池 连接orcale数据库报错,折磨一天了,请大佬解救,启动都正常的
2
java连接sql server2005,驱动加载成功,数据库连接失败,应该怎么办?
1
springboot+mybatis切换数据源问题
1
java.lang.NullPointerException--at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement
2
导入一个javaweb的源代码,连接数据库总是报错?
2
c3p0连接数据库提示Access denied for user 'root'@'localhost' (using password: YES)
6
求助!!!http500的问题
2
C#里面有没有像Java系统中的JNDI一样的数据源配置管理中心?
2
Servlet遇到java.lang.NullPointerException问题无法解决,恳求帮助
1
shiro拦截问题,一个服务在内部自己调用自己,发现被shiro拦截了。
1
springboot框架第一次连接mysql时报错,求解?
1
springboot+sybase数据库
1
mybatis整合sping错误。
1
请大佬们帮忙看下,这个配置文件所有的都正确为什么一直报连接不上数据库,数据库也运行着
2
SSh整合SessionFactory出错,求解决,改不出来,一天了,下面是错误提示
1
springboot 配置hibernate 开始使用的是mysql,都正常,但是换成Oracle后总是创建表。
0
springboot2.1.4 + jpa + hibernate 使用aop注解形式实现多数据源管理 可能懒加载出现问题求大神解答
1
ElasticSearch6.3.1 jdbc连接提示Original type was [request [/_xpack/sql] contains unrecognized parameter: [mode]].
1
java中mysql的异常 ,求助
0
QueryRunner的无connection是怎样获得连接的???