
同事们,我无法解决春季交易超过一周的问题.
我创建了非常相似的帖子(Why data wasn’t saved when I use @Transactional annotation?),但无法解决其中的问题;当然我考虑了给@Florian Schaetz的建议.我请你帮助我.
所以,我有测试类:
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = AppConfig.class,loader = AnnotationConfigContextLoader.class)@Transactionalpublic class OdValuesServiceTest { static final Logger LOG = Logger.getLogger(OdValuesServiceTest.class.getname()); @autowired OdValuesService odValuesService; @autowired DBCommonsService dbCommonsService; @Transactional ("txManagerDU") @Test @Commit public voID addOdValue() throws Exception { OdValuesEntity odValuesEntity = new OdValuesEntity(); odValuesEntity.setID(dbCommonsService.getNextDocOD("OD_VALUES_ID_GEN")); odValuesEntity.setSysname("name" + DataGenerator.getRandomISIN()); odValuesEntity.setname("name"); odValuesEntity.setIsIn((short) 1); odValuesEntity.setvType(2); odValuesEntity.setMfu((short) 0); odValuesEntity.setIsin("AU000A0JP922"); odValuesEntity.setCfi(""); odValuesService.addOdValue(odValuesEntity); }}接口类addOdValue如下所示:
public interface OdValuesDAO { public voID addOdValue (OdValuesEntity odValuesEntity);}而DAO实现类是:
@Componentpublic class OdValuesDAOImpl implemets OdValuesDAO { static final Logger LOG = Logger.getLogger(OdValuesDAO.class.getname()); @autowired @QualifIEr("emDU") private EntityManager em; public voID addOdValue (OdValuesEntity odValuesEntity) { LOG.info(odValuesEntity.toString()); LOG.info("Transaction is active:" + em.getTransaction().isActive()); //em.getTransaction().begin(); em.persist(odValuesEntity); //em.getTransaction().commit(); }}Spring上下文,作为配置文件,是:
@Configuration@EnableTransactionManagement@ComponentScanpublic class AppConfig {static final Logger LOG = Logger.getLogger(AppConfig.class.getname());/*There are some beans to work with propertIEs file*/ @Bean public BasicdataSource primaryDuDataSource() { BasicdataSource primaryDuDataSource = new BasicdataSource(); primaryDuDataSource.setDriverClassname("org.firebirdsql.jdbc.FBDriver"); primaryDuDataSource.setUrl(primaryDuDbUrl); primaryDuDataSource.setUsername(primaryDuDbUser); primaryDuDataSource.setPassword(primaryDuDbPassword); primaryDuDataSource.setMaxIDle(30); primaryDuDataSource.setMaxWaitMillis(10000); primaryDuDataSource.setValIDationquery("select 1 from rdb$database"); primaryDuDataSource.setTestOnBorrow(false); primaryDuDataSource.setTestWhileIDle(true); primaryDuDataSource.setDefaultautoCommit(true); return primaryDuDataSource; } @Bean public BasicdataSource secondaryDataSource() { BasicdataSource secondaryDataSource = new BasicdataSource(); secondaryDataSource.setDriverClassname("com.microsoft.sqlserver.jdbc.sqlServerDriver"); secondaryDataSource.setUrl(scndsysDbUrl); secondaryDataSource.setUsername(scndsysDbUser); secondaryDataSource.setPassword(scndsysDbPassword); secondaryDataSource.setMaxIDle(2); secondaryDataSource.setMaxWaitMillis(10000); secondaryDataSource.setValIDationquery("select 1"); secondaryDataSource.setTestOnBorrow(true); secondaryDataSource.setTestWhileIDle(true); secondaryDataSource.setDefaultautoCommit(true); return secondaryDataSource; } @Bean public LocalContainerEntityManagerfactorybean entityManagerFactory (@QualifIEr("secondaryDataSource") BasicdataSource secondaryDataSource) { LocalContainerEntityManagerfactorybean localConnectionfactorybean = new LocalContainerEntityManagerfactorybean(); localConnectionfactorybean.setPersistenceXmlLocation("classpath:meta-inf/persistence.xml"); localConnectionfactorybean.setDataSource(secondaryDataSource); localConnectionfactorybean.setJpavendorAdapter(new HibernateJpavendorAdapter()); return localConnectionfactorybean; } @Bean public LocalContainerEntityManagerfactorybean entityManagerFactoryprmsys (@QualifIEr("primaryDuDataSource")BasicdataSource primaryDuDataSource) { LocalContainerEntityManagerfactorybean emf = new LocalContainerEntityManagerfactorybean(); emf.setPersistenceXmlLocation("classpath:meta-inf/persistence.xml"); emf.setDataSource(primaryDuDataSource); MapStacktrace是:
> "C:\Program files\Java\jdk1.8.0_77\bin\java" -ea> -DIDea.launcher.port=7537 "-DIDea.launcher.bin.path=C:\Program files (x86)\JetBrains\IntelliJ IDEA 2016.1.3\bin"> -DIDea.junit.sm_runner> -Dfile.enCoding=UTF-8 -classpath "jars"> com.intellij.rt.execution.application.AppMain> com.intellij.rt.execution.junit.JUnitStarter -IDeVersion5> au.acap.app.JpaEntitIEs.Service.OdValuesServiceTest,addOdValue> log4j:WARN Continuable parsing error 86 and column 23 log4j:WARN The> content of element type "log4j:configuration" must match> "(renderer*,throwableRenderer?,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)". INFO : [sep-16 15:08:48,172]> context.support.DefaultTestContextbootstrapper - Loaded default> TestExecutionListener class names from location> [meta-inf/spring.factorIEs]:> [org.springframework.test.context.web.ServletTestExecutionListener,> org.springframework.test.context.support.DirtIEsContextBeforeModesTestExecutionListener,> org.springframework.test.context.support.DependencyInjectionTestExecutionListener,> org.springframework.test.context.support.DirtIEsContextTestExecutionListener,> org.springframework.test.context.transaction.TransactionalTestExecutionListener,> org.springframework.test.context.jdbc.sqlScriptsTestExecutionListener]> INFO : [sep-16 15:08:48,213]> context.support.DefaultTestContextbootstrapper - Could not instantiate> TestExecutionListener> [org.springframework.test.context.web.ServletTestExecutionListener].> Specify custom Listener classes or make the default Listener classes> (and their required dependencIEs) available. Offending class:> [org/springframework/web/context/request/RequestAttributes] INFO :> [sep-16 15:08:48,215] context.support.DefaultTestContextbootstrapper -> Using TestExecutionListeners:> [org.springframework.test.context.support.DirtIEsContextBeforeModesTestExecutionListener@67784306,> org.springframework.test.context.support.DependencyInjectionTestExecutionListener@335eadca,> org.springframework.test.context.support.DirtIEsContextTestExecutionListener@210366b4,> org.springframework.test.context.transaction.TransactionalTestExecutionListener@eec5a4a,> org.springframework.test.context.jdbc.sqlScriptsTestExecutionListener@2b2948e2]INFO> : [sep-16 15:08:48,402] context.support.GenericApplicationContext -> Refreshing> org.springframework.context.support.GenericApplicationContext@3712b94:> startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hIErarchy> INFO : [sep-16 15:08:48,956] app.Commons.QortCommons - StartDate:> 24.06.2016 00:00:00 INFO : [sep-16 15:08:48,958] app.Commons.QortCommons - EndDate: 11.08.2016 23:59:59 INFO : [sep-16> 15:08:48,970] acap.app.AppConfig - mainClassLocation:> /C:/Users/maya/documents/GIT/qort-integration/prmsys/target/classes/> INFO : [sep-16 15:08:48,971] acap.app.AppConfig - PropertIEs will read> from:> /C:/Users/maya/documents/GIT/qort-integration/prmsys/target/classes/application.propertIEs> INFO : [sep-16 15:08:49,238]> orm.jpa.LocalContainerEntityManagerfactorybean - Building JPA> container EntityManagerFactory for persistence unit 'PersistenceUnit'> INFO : [sep-16 15:08:50,587]> orm.jpa.LocalContainerEntityManagerfactorybean - Building JPA> container EntityManagerFactory for persistence unit 'PersistenceUnit'> Hibernate: create table HT_OD_A_SHARES (SHARE integer not null,> hib_sess_ID CHAR(36)) Hibernate: create table HT_OD_DolS (ID integer> not null,hib_sess_ID CHAR(36)) Hibernate: create table HT_OD_VALUES> (ID integer not null,hib_sess_ID CHAR(36)) .... INFO : [sep-16> 15:08:52,350] java.sql.DatabaseMetaData - HHH000262: table not found:> ...... ERROR: [sep-16 15:08:52,442] tool.hbm2ddl.SchemaUpdate -> HHH000388: Unsuccessful: create table ..... ERROR: [sep-16> 15:08:52,444] tool.hbm2ddl.SchemaUpdate - GDS Exception. 335544569.> Dynamic sql Error sql error code = -104 Token unkNown - line 1,column> 17 . ERROR: [sep-16 15:08:52,449] tool.hbm2ddl.SchemaUpdate -> HHH000388: Unsuccessful: create table .....> INFO : [sep-16 15:08:52,741] context.transaction.TransactionContext - Began transaction (1) for> test context [DefaultTestContext@222afc67 testClass => OdValuesServiceTest,testInstance => au.acap.app.JpaEntitIEs.Service.OdValuesServiceTest@4c2fb9dd,> testMethod = addOdValue@OdValuesServiceTest,testException = [null],> mergedContextConfiguration = [MergedContextConfiguration@58cf8f94> testClass = OdValuesServiceTest,locations = '{}',classes = '{class> au.acap.app.AppConfig}',contextinitializerClasses = '[]',> activeProfiles = '{}',propertySourceLocations = '{}',> propertySourcePropertIEs = '{}',contextLoader => 'org.springframework.test.context.support.AnnotationConfigContextLoader',> parent = [null]]]; transaction manager> [org.springframework.orm.jpa.JpaTransactionManager@54f4a7f0]; rollback> [false] Hibernate: select gen_ID(OD_VALUES_ID_GEN,1) as DOC_ID from> rdb$database INFO : [sep-16 15:08:52,872]> JpaEntitIEs.Service.DBCommonsService - docID = 10465 INFO : [sep-16> 15:08:52,931] app.DAO.OdValuesDAO -> au.acap.app.JpaEntitIEs.OdValuesEntity@70c0a3d5[ ID=10465 > sysname=nameJP3228600007 name=name vType=2 isin=AU000A0JP922 > mfu=0 isIn=1 cfi= ] INFO : [sep-16 15:08:52,933]> app.DAO.OdValuesDAO - Transaction is active:false Hibernate: insert> into OD_VALUES (B_DATE,BASE_VAL,CFI,IS_IN,ISIN,MFU,name,> SYSname,V_TYPE,ID) values (?,?,?) INFO :> [sep-16 15:08:53,004] context.transaction.TransactionContext -> Committed transaction for test context [DefaultTestContext@222afc67> testClass = OdValuesServiceTest,> parent = [null]]]. INFO : [sep-16 15:08:53,007]> context.support.GenericApplicationContext - Closing> org.springframework.context.support.GenericApplicationContext@3712b94:> startup date [Fri Sep 16 15:08:48 MSK 2016]; root of context hIErarchy> INFO : [sep-16 15:08:53,013]> orm.jpa.LocalContainerEntityManagerfactorybean - Closing JPA> EntityManagerFactory for persistence unit 'PersistenceUnit' INFO :> [sep-16 15:08:53,030] orm.jpa.LocalContainerEntityManagerfactorybean -> Closing JPA EntityManagerFactory for persistence unit 'PersistenceUnit'> Process finished with exit code 0问题是交易没有提交.请帮我在测试期间将数据保存在DB中.谢谢.
更新:
还需要帮助!
我的进口可能有问题吗?
import org.springframework.batch.item.database.JdbcCursorItemReader;import org.springframework.beans.factory.annotation.QualifIEr;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean;import org.springframework.orm.jpa.vendor.HibernateJpavendorAdapter;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;最佳答案来自@Commit文档:Warning:
@Commitcan be used as direct
replacement for@Rollback(false); however,it should
not be declared alongsIDe@Rollback. Declaring
@Commitand@Rollbackon the same test method or on the
same test class is unsupported and may lead to unpredictable results.”
所以混合@Commit和@Rollback是一个坏主意.
另一个是具有不同配置的类/方法@Transactional标签(但我不确定这是否是这里的问题.)
总结以上是内存溢出为你收集整理的java – 在JUnit测试中使用Transaction注释时,数据不会保存在DB中全部内容,希望文章能够帮你解决java – 在JUnit测试中使用Transaction注释时,数据不会保存在DB中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)