您当前的位置:首页 > 今日分享头条 > 正文

packagestoscan(多数据源 spring怎么管理事务的)

本文目录

  • 多数据源 spring怎么管理事务的
  • packagesToScan的配置相关问题
  • 如何在spring框架中解决多数据源的问题
  • 在Eclipse中怎么集成spring和hibernate的配置
  • springmvc中的怎么配置多个
  • javaconfig配置的sessionFactory在DAO层怎么注入进来

多数据源 spring怎么管理事务的

在SpringSide 3 中,白衣提供的预先配置好的环境非常有利于用户进行快速开发,但是同时也会为扩展带来一些困难。最直接的例子就是关于在项目中使用多个数据源的问题,似乎 很难搞。在上一篇中,我探讨了SpringSide 3 中的数据访问层,在这一篇中,我立志要解决多数据源配置的难题,我的思路是这样的:第一步、测试能否配置多个DataSource第二步、测试能否配置多个SessionFactory第三步、测试能否配置多个TransactionManager第四步、测试能否使用多个TransactionManager,也就是看能否配置多个基本上到第四步就应该走不通了,因为Spring中似乎不能配置多个,而且@transactional注解也无法让用户选择具体使用哪个TransactionManager。也就是说,在SpringSide的应用中,不能让不同的数据源分别属于不同的事务管理器,多数据源只能使用分布式事务管理器,那么测试思路继续如下进行:第五步、测试能否配置JTATransactionManager如果到这一步,项目还能顺利在Tomcat中运行的话,我们就算大功告成了。但我总认为事情不会那么顺利,我总觉得JTATransactionManager需要应用服务器的支持,而且需要和JNDI配合使用,具体是不是这样,那只有等测试后才知道。如果被我不幸言中,那么进行下一步:第六步、更换Tomcat为GlassFish,更换JDBC的DataSource为JNDI查找的DataSource,然后配置JTATransactionManager下面测试开始,先假设场景,还是继续用上一篇中提到的简单的文章发布系统,假设该系统运行一段时间后非常火爆,单靠一台服务器已经无法支持巨大的用户数, 这时候,站长想到了把数据进行水平划分,于是,需要建立一个索引数据库,该索引数据库需保存每一篇文章的Subject及其内容所在的Web服务器,而每 一个Web服务器上运行的项目,需要同时访问索引数据库和内容数据库。所以,需要创建索引数据库,如下:[java] view plain copycreate database puretext_index; use puretext_index; create table articles( id int primary key auto_increment, subject varchar(256), webserver varchar(30) ); 第一步测试,配置多个DataSource,配置文件如下:application.properties:[java] view plain copyjdbc.urlContent=jdbc:mysql://localhost:3306/PureText useUnicode=true&characterEncoding=utf8 jdbc.urlIndex=jdbc:mysql://localhost:3306/PureText_Index useUnicode=true&characterEncoding=utf8 applicationContext.xml:[java] view plain copy《 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:jee=“http://www.springframework.org/schema/jee“ xmlns:tx=“http://www.springframework.org/schema/tx“ xmlns:context=“http://www.springframework.org/schema/context“ default-lazy-init=“true“ xsi:schemalocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd“》 《description》Spring公共配置文件 《/description》 《!-- 定义受环境影响易变的变量 --》 《bean class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer“》 《property name=“systemPropertiesModeName“ value=“SYSTEM_PROPERTIES_MODE_OVERRIDE“》 《property name=“ignoreResourceNotFound“ value=“true“》 《property name=“locations“》 《list》 《!-- 标准配置 --》 《value》classpath*:/application.properties《/value》 《!-- 本地开发环境配置 --》 《value》classpath*:/application.local.properties《/value》 《!-- 服务器生产环境配置 --》 《!----》file:/var/myapp/application.server.properties --》 《!--!----》《/list》 《/property》 《/property》《/property》《/bean》 《!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 --》 《context:component-scan base-package=“cn.puretext“》 《!-- 数据源配置,使用应用内的DBCP数据库连接池 --》 《bean id=“dataSourceContent“ class=“org.apache.commons.dbcp.BasicDataSource“ destroy-method=“close“》 《!-- Connection Info --》 《property name=“driverClassName“ value=“com.mysql.jdbc.Driver“》 《property name=“url“ value=“${jdbc.urlContent}“》 《property name=“username“ value=“${jdbc.username}“》 《property name=“password“ value=“${jdbc.password}“》 《!-- Connection Pooling Info --》 《property name=“initialSize“ value=“5“》 《property name=“maxActive“ value=“100“》 《property name=“maxIdle“ value=“30“》 《property name=“maxWait“ value=“1000“》 《property name=“poolPreparedStatements“ value=“true“》 《property name=“defaultAutoCommit“ value=“false“》 《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/bean》 《bean id=“dataSourceIndex“ class=“org.apache.commons.dbcp.BasicDataSource“ destroy-method=“close“》 《!-- Connection Info --》 《property name=“driverClassName“ value=“com.mysql.jdbc.Driver“》 《property name=“url“ value=“${jdbc.urlIndex}“》 《property name=“username“ value=“${jdbc.username}“》 《property name=“password“ value=“${jdbc.password}“》 《!-- Connection Pooling Info --》 《property name=“initialSize“ value=“5“》 《property name=“maxActive“ value=“100“》 《property name=“maxIdle“ value=“30“》 《property name=“maxWait“ value=“1000“》 《property name=“poolPreparedStatements“ value=“true“》 《property name=“defaultAutoCommit“ value=“false“》 《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/property》《/bean》 《!-- 数据源配置,使用应用服务器的数据库连接池 --》 《!--《jee:jndi-lookup id=“dataSource“ jndi-name=“java:comp/env/jdbc/ExampleDB“》--》 《!-- Hibernate配置 --》 《bean id=“sessionFactory“ class=“org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean“》 《property name=“dataSource“ ref=“dataSourceContent“》 《property name=“namingStrategy“》 《bean class=“org.hibernate.cfg.ImprovedNamingStrategy“》 《/bean》《/property》 《property name=“hibernateProperties“》 《props》 《prop key=“hibernate.dialect“》org.hibernate.dialect.MySQL5InnoDBDialect《/prop》 《prop key=“hibernate.show_sql“》${hibernate.show_sql}《/prop》 《prop key=“hibernate.format_sql“》${hibernate.format_sql}《/prop》 《prop key=“hibernate.cache.provider_class“》org.hibernate.cache.EhCacheProvider 《/prop》 《prop key=“hibernate.cache.provider_configuration_file_resource_path“》${hibernate.ehcache_config_file}《/prop》 《/props》 《/property》 《property name=“packagesToScan“ value=“cn.puretext.entity.*“》 《/property》《/property》《/bean》 《!-- 事务管理器配置,单数据源事务 --》 《bean id=“transactionManager“ class=“org.springframework.orm.hibernate3.HibernateTransactionManager“》 《property name=“sessionFactory“ ref=“sessionFactory“》 《/property》《/bean》 《!-- 事务管理器配置,多数据源JTA事务--》 《!-- id=“transactionManager“ class=“org.springframework.transaction.jta.JtaTransactionManager or WebLogicJtaTransactionManager“》 --》 《!-- 使用annotation定义事务 --》 《tx:annotation-driven transaction-manager=“transactionManager“》 《/tx:annotation-driven》《!--!----》《!--!--《jee:jndi-lookup--》《/context:component-scan》《/beans》

packagesToScan的配置相关问题

麻烦贴代码吧,注释不能注入有很多种错误的,我在加班.你最好在这里贴错误代码吧,spring注解配置,要看你是开发框架是整体全部配置还是只是部分注解

如何在spring框架中解决多数据源的问题

看你用什么了,假如说通过工厂模式生成的数据连接(hibernate、spring jdbc都是这样做的),一个工厂只能配一个DataSource,即一个工厂只能配一套数据库源,想要配多个数据源?那就需要配多个工厂就行了。

例如:我自己用的是hibernate+tomcatJDBC,通过spring管理

《bean id=“dataSource“ class=“org.apache.tomcat.jdbc.pool.DataSource“》《property name=“url“ value=“${jdbc.url}“》《/property》《property name=“username“ value=“${jdbc.userName}“》《/property》《property name=“password“ value=“${jdbc.pwd}“》《/property》《property name=“driverClassName“ value=“${jdbc.driver}“》《/property》《property name=“maxActive“ value=“${jdbc.maxActive}“》《/property》《property name=“maxIdle“ value=“${jdbc.maxIdle}“》《/property》《property name=“maxWait“ value=“${jdbc.maxWait}“》《/property》《property name=“testOnBorrow“ value=“${jdbc.testOnBorrtow}“》《/property》《property name=“validationQuery“ value=“${jdbc.validationQuery}“》《/property》《property name=“timeBetweenEvictionRunsMillis“ value=“${jdbc.betweenEvctionTime}“》《/property》《property name=“minEvictableIdleTimeMillis“ value=“${jdbc.minEvictionTime}“》《/property》《/bean》《bean id=“sessionFactory“class=“org.springframework.orm.hibernate5.LocalSessionFactoryBean“》《property name=“dataSource“ ref=“dataSource“》《/property》《property name=“configLocation“ value=“classpath:hibernate.cfg.xml“》《/property》《property name=“packagesToScan“》《list》《value》donald.framework.entities《/value》《/list》《/property》《/bean》

楼主类似的只要配一个像sessionFactory一样的对象就行了

在Eclipse中怎么集成spring和hibernate的配置

  操作步骤如下:

  1、bundle》=com.abc.def.lib.common:第三方jar包的统一管理,RCP中常用的jar包都在这边打包。当然,可以根据具体需要进行拆分;

  2、bundle》=com.abc.def.properties:配置文件管理bundle,其可以动态读取Eclipse RCP的根目录下properties目录中的*.properties文件。新的业务Bundle也可以往此bundle中注册自己的properties文件。目录“%ECLIPSE_RCP_HOME%/properties/“ 中的properties文件可供手动修改,如hibernate的数据库连接信息等;

  3、bundle》=com.abc.def.lib.common:hibernate相关的jar包,依赖com.abc.def.lib.common 和 com.abc.def.properties两个bundle,MANIFEST.MF中增加: Eclipse-BuddyPolicy: dependent

  4、bundle》=com.abc.def.lib.spring:Spring相关的jar包和相关的类,依赖com.abc.def.lib.common、 com.abc.def.properties、com.abc.def.lib.hibernate三个bundle,MANIFEST.MF中增加: Eclipse-BuddyPolicy: dependent

  5、bundle》=com.abc.def.main:基础架构的入口bundle,这里进行RCP的初始化管理,依赖以上所有bundle。  

  6、RCP和SH的集成,很关键的一点就是上面红色字体标注部分,通过Eclipse的buddy机制实现bundle之间的双向访问。  

  7、bundle》=com.abc.def.lib.spring中,修改覆盖了jar包中的org.springframework.util.ResourceUtils,避免Spring访问Annotation标注的Service类时找不到类的问题。  

  8、Spring和Hibernate实现了真正的零配置,所有Entity和Service都通过Spring和Hibernate的Annotation直接定义。目前在bundle》=com.abc.def.lib.spring中,在DataSourceConfig类中,用Annotation定义了dataSource、sessionFactory、txManager等bean,其中,sessionFactory中,通过PackagesToScan设置了model的统一根节点:com.abc.def,只要在这个package(包括子包)下的Annotation定义的model,都将自动纳入到SH的管理。  

  9、bundle》=com.abc.def.main中,通过ApplicationContext appContext = new AnnotationConfigApplicationContext(“com.abc.def“),得到ApplicationContext。

springmvc中的怎么配置多个

  场景描述:有多个数据库,每个数据库可能分布在不同的mysql instance上面,有多个存储过程,每个存储过程可能分布在不同的数据库中,需要有两个配置文件。  1. mysql 数据库映射:  A.driverClassName=com.mysql.jdbc.DriverA.url=jdbc:mysql://172.20.7.51:3308/blogA.username=trappuserA.password=Opera1!B.driverClassName=com.mysql.jdbc.DriverB.url=jdbc:mysql://localhost:3306/weddingB.username=rootB.password=opera  上面定义的A、B为两个mysql instance的缩写。  2. 存储过程与mysql instance的映射关系:  SP_Get_User=AGetStocks=B  定义两个模拟存储过程,第一个数据库“SP_Get_User“是在数据库A下面,第二个数据库”GetStocks“是在数据库B下面。3. 建立自定义的sessionFactory  3.1 xml配置的datasource及sessionFactory如下:  《bean class=“org.apache.commons.dbcp.BasicDataSource“ destroy-method=“close“ id=“dataSource“》《property name=“driverClassName“ value=“${database.driverClassName}“/》《property name=“url“ value=“${database.url}“/》《property name=“username“ value=“${database.username}“/》《property name=“password“ value=“${database.password}“/》《/bean》《bean id=“sessionFactory“ class=“org.springframework.orm.hibernate4.LocalSessionFactoryBean“》《property name=“dataSource“ ref=“dataSource“/》《property name=“packagesToScan“ value=“com.xx.assetcommander“》《/property》《property name=“hibernateProperties“》《props》《prop key=“hibernate.dialect“》org.hibernate.dialect.MySQLDialect《/prop》《prop key=“hibernate.show_sql“》true《/prop》《/props》《/property》《/bean》  此处我们定义的sessionFactory的类型为LocalSessionFactoryBean,它是一个工厂对象,与我们再需要的 SessionFactory不是一回事,我们需要的sessionfactory是org.hibernate.SessionFactory,这个对象可以被第一个sessionFactory的getObject()方法生成。  3.2 由于我们连接的是多个mysql instance, 不方便在xml中配置多个datasource和多个sessionFactory,故可以通过纯java的形式开发,可以使用map来存储存储过程与mysql database的关系,将存储过程的名字和数据库建议关系,这样通过存储过程的名称就能得到数据库的缩写名,通过数据库的缩写名能够找到对应的mysql instance,使用纯java开发的过程类似于xml配置,如下:  ds.setDriverClassName(getDriver());ds.setUrl(getUrl());ds.setUsername(getUsername());ds.setPassword(getPassword());LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();sessionFactory.setDataSource(ds);sessionFactory.setPackagesToScan(“com.xx.assetcommander“);Properties params = new Properties();params.setProperty(“hibernate.dialect“,“org.hibernate.dialect.MySQLDialect“);params.setProperty(“hibernate.show_sql“, “true“);sessionFactory.setHibernateProperties(params);  当我们获得可以使用的LocalSessionFactoryBean时候,在调用getObject()获得SessionFactory之前,必须要调用afterPropertiesSet()方法,否则得到的sessionFactory为空。  public Session getDsBySp(String spName) throws IOException {//get the corresponding mysql database shortname by sp nameString dbName = getDbForSP(str);//get the corresponding mysql instance connection by mysql database shortnameLocalSessionFactoryBean fB = getDsByDb(dbName);// don’t forget this line or null will be returned when you call getObject() method.fB.afterPropertiesSet();return fB.getObject().openSession();}   注:在tomcat启动时,如果没有配置任何datasource,会出现如下错误:  org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined故需要配置默认的datasource.这种方式需要做到不同的数据库instance直接业务的完全独立,不可以出现跨数据库的表join,否则处理难度会增加。还有就是对于多数据库直接的事务管理如何去处理?

javaconfig配置的sessionFactory在DAO层怎么注入进来

1、基于Java类定义Bean配置元数据,其实就是通过Java类定义Spring配置元数据,且直接消除XML配置文件。 2、基于Java类定义Bean配置元数据中的@Configuration注解的类等价于XML配置文件,@Bean注解的方法等价于XML配置文件中的Bean定义。 3、基于Java类定义Bean配置元数据需要通过AnnotationConfigApplicationContext加载配置类及初始化容器,类似于XML配置文件需要使用ClassPathXmlApplicationContext加载配置文件及初始化容器。4、基于Java类定义Bean配置元数据需要CGLIB的支持,因此要保证类路径中包括CGLIB的jar包。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: pdf格式怎么打开(手机上怎么打开pdf格式文件)

下一篇: 武汉大学药学院研究生招生简章2023(武汉大学药学院)



推荐阅读