多个数据库+ JNDI与Spring数据JPA初始化 [英] Multiple databases + JNDI with Spring data JPA to initialize

查看:107
本文介绍了多个数据库+ JNDI与Spring数据JPA初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用Application Server内置功能管理多个DataSource并使用JNDI访问它。我使用Spring JPA数据的Spring引导。
我可以为单个数据源配置application.properties。但在尝试为多个数据源执行相同操作时,我在启动应用程序时遇到异常。



启动tomcat服务器时出现异常: -

 原因:org.springframework.beans.factory.BeanCreationException:创建名为'(内部bean)#1902f8f'的bean时出错:无法解析bean的引用'entityManagerFactory'while setting 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver .java:108)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver .java:444)在org.springframewor
k.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)
。在组织。 springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org。 springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
... 115 more
引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有bean名为'entityManagerFactory'在org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(Defa)中定义为
ultListableBeanFactory.java:687)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1168)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean( AbstractBeanFactory.java:281)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference( BeanDefinitionValueResolver.java:351)
... 123 more

请在下方找到代码示例



属性文件具有以下配置: -

  datasource.primary.jndi-name = jdbc / employee 
datasource.primary.expected-type = javax.sql.DataSource
datasource.secondary.jndi-name = jdbc / customer
datasource.secondary.expected-type = javax.sql.DataSource

我是确定在context.xml文件中的配置:
$ b $

 <资源名称=jdbc / customerauth =容器 type =javax.sql.DataSource
maxTotal =100maxIdle =30maxWaitMillis =10000
username =rootpassword =rootdriverClassName =com.mysql.jdbc .Driver
url =jdbc:mysql:// localhost:3306 / customer/>

< Resource name =jdbc / employeeauth =Containertype =javax.sql.DataSource
maxTotal =100maxIdle =30maxWaitMillis =10000
username =rootpassword =rootdriverClassName =com.mysql.jdbc.Driver
url =jdbc:mysql:// localhost:3306 / employee/>

将以下内容添加到Spring引导配置类中: -

  @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class})


$ b

客户配置类: -

  @Configuration 
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages =dao.repository.customer,
entityManagerFactoryRef =customerEntityManager,
transactionManagerRef =customerTransactionManager

public class customerConfig {


@Bean
public LocalContainerEntityManagerFactoryBean customerEntityManager(){
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(customerDataSource());
em.setPackagesToScan(new String [] {dao.entity.customer});
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
返回em;



@ConfigurationProperties(prefix =datasource.secondary)
public DataSource customerDataSource(){
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup ();
dsLookup.setResourceRef(true);
DataSource dataSource = dsLookup.getDataSource(jdbc / customer);
返回dataSource;


$ b @Bean
public PlatformTransactionManager customerTransactionManager(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(customerEntityManager()。getObject());
返回transactionManager;


员工配置类

  @Configuration 
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages =dao.repository.employee,
entityManagerFactoryRef =employeeEntityManager,
transactionManagerRef =employeeTransactionManager

public class employeeConfig {


@Bean
@Primary
public LocalContainerEntityManagerFactoryBean employeeEntityManager(){
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(employeeDataSource());
em.setPackagesToScan(new String [] {dao.entity.employee});
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
返回em;


$Be
@Primary
@ConfigurationProperties(prefix =datasource.primary)
public DataSource employeeDataSource(){
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
DataSource dataSource = dsLookup.getDataSource(jdbc / employee);
返回dataSource;


$ b $Be
@Primary
public PlatformTransactionManager employeeTransactionManager(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(employeeEntityManager()。getObject());
返回transactionManager;






$ b

在实体类中,我提到了模式名称。

  @Entity 
@Table(schema =customer)
@NamedQuery(name =User .findAll,query =SELECT u FROM User u)
public class User实现Serializable {
.........
}

@Entity
@Table(schema =employee)

public class Project implements Serializable {
.........
}

更新

我已经移动了一些,但仍然没有解决。

 原因:net.spy.memcached.OperationTimeoutException:变异操作时间无法修改计数器[validator.validatorCache.HibernateCacheTimestamperMemcachedImpl:timestamp] 
at net.spy.memcached.MemcachedClient.mutate(MemcachedClient.java:1663)〜[spymemcached-2.10.2.jar:2.10.2]
at net.spy.memcached.MemcachedClient.mutateWithDefault(MemcachedC lient.java:1835)〜[spymemcached-2.10.2.jar:2.10.2]
at net.spy.memcached.MemcachedClient.incr(MemcachedClient.java:1767)〜[spymemcached-2.10.2.jar :2.10.2]
at kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter.increaseCounter(SpyMemcachedAdapter.java:185)〜[hibernate4-memcached-spymemcached-adapter-0.7.jar:na]
在kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl.next(HibernateCacheTimestamperMemcachedImpl.java:59)〜[hibernate4-memcached-core-0.7.jar:na]
at kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory。 nextTimestamp(Hibernate4MemcachedRegionFactory.java:127)〜[hibernate4-memcached-core-0.7.jar:na]
at org.hibernate.internal.SessionFactoryImpl $ SessionBuilderImpl.openSession(SessionFactoryImpl.java:1589)〜[hibernate-core -4.3.8.Final.jar:4.3.8.Final]
at org.hibernate.jpa.internal.EntityManagerImpl.internalGetSession(EntityManagerImpl.java:141)〜 [hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
在org.hibernate.jpa.internal.EntityManagerImpl.isOpen(EntityManagerImpl.java:165)〜[hibernate-entitymanager-4.3。 8.Final.jar:4.3.8.Final]
at org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:101)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3 .8.Final]
在org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:96)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
在org.hibernate.jpa.internal.EntityManagerImpl.getSession(EntityManagerImpl.java:111)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
at org.hibernate。 jpa.spi.AbstractEntityManagerImpl.setDefaultProperties(AbstractEntityManagerImpl.java:308)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit (AbstractEntityManagerImpl.java:213)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8。 Final]
在org.hibernate.jpa.internal.EntityManagerImpl。< init>(EntityManagerImpl.java:91)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
在org.hibernate处使用org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
。 jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)〜[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 〜[na:1.8.0_20]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_20]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl。 java:43)〜[na:1.8.0_20]
at org.springframework。java.lang.reflect.Method.invoke(Method.java:483)〜[na:1.8.0_20]
。 orm.jpa.AbstractEntityManagerFactoryBean .invokeProxyMethod(AbstractEntityManagerFactoryBean.java:388)〜[spring-orm-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean $ ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean。 java:541)〜[spring-orm-4.0.9.RELEA
at com.sun.proxy。$ Proxy558.createEntityManager(Unknown Source)〜[na:na]
at org.springframework.orm .jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:285)〜[spring-orm-4.0.9.RELEASE.jar:4.0.9.RELEASE
at com.sun.proxy。$ Proxy559.getDelegate(未知源)〜[na:na]
在org.springframework.data.jpa.provider.JpaClassUtils.isEntityManagerOfType(JpaClassUtils.java:46)〜[spring-data-jpa-1.8.0.RELEASE.jar: na]
at org.springframework.data.jpa.provider.PersistenceProvider.fromEntityManager(PersistenceProvider.java:296)〜[spring-data-jpa-1.8.0.RELEASE.jar:na]
at org.s在org.springframework上使用pringframework.data.jpa.repository.support.JpaRepositoryFactory。< init>(JpaRepositoryFactory.java:57)〜[spring-data-jpa-1.8.0.RELEASE.jar:na]
。 data.jpa.repository.support.JpaRepositoryFactoryBean.createRepositoryFactory(JpaRepositoryFactoryBean.java:79)〜[spring-data-jpa-1.8.0.RELEASE.jar:na]
at org.springframework.data.jpa.repository .support.JpaRepositoryFactoryBean.doCreateRepositoryFactory(JpaRepositoryFactoryBean.java:69)〜[spring-data-jpa-1.8.0.RELEASE.jar:na]
at org.springframework.data.repository.core.support.TransactionalRepositoryFactoryBeanSupport。 createRepositoryFactory(TransactionalRepositoryFactoryBeanSupport.java:72)〜[spring-data-
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:216)〜[spring-data-commons-1.10 .0.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaRepositoryFactor yBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)〜[spring-data-jpa-1.8.0.RELEASE.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java :1633)〜[spring-beans-4.1.6.RELEASE.jar:4.1.6。
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)〜[spring-beans-4.1.6.RELEASE.jar:4.1.6.REL
.. 。112个常用框架omittedenter代码在这里
在此输入代码

我将bwlo属性设置为LocalContainerEntityManagerFactoryBean对象:

  HashMap< String,Object> properties = new HashMap< String,Object>(); 
properties.put(hibernate.hbm2ddl.auto,validate);
properties.put(hibernate.dialect,org.hibernate.dialect.MySQL5Dialect);

properties.put(hibernate.cache.use_second_level_cache,true);
properties.put(hibernate.cache.use_query_cache,true);
properties.put(hibernate.cache.region.factory_class,kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory);
properties.put(hibernate.cache.default_cache_concurrency_strategy,NONSTRICT_READ_WRITE);
properties.put(hibernate.cache.region_prefix,userPersistenceUnit);
properties.put(hibernate.cache.use_structured_entries,false);
properties.put(h4m.adapter.class,kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter);
properties.put(h4m.timestamper.class,kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl);

properties.put(h4m.adapter.spymemcached.hosts,localhost:11211);
properties.put(h4m.adapter.spymemcached.hashalgorithm,KETAMA_HASH);
properties.put(h4m.adapter.spymemcached.operation.timeout.millis,5000);
properties.put(h4m.adapter.spymemcached.transcoder,kr.pe.kwonnam.hibernate4memcached.spymemcached.KryoTranscoder);
properties.put(h4m.adapter.spymemcached.cachekey.prefix,validator);
properties.put(h4m.adapter.spymemcached.kryotranscoder.compression.threashold.bytes,20000);


properties.put(h4m.expiry.seconds,600);
properties.put(h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache,86400);
properties.put(h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache,3600);
properties.put(h4m.expiry.seconds.userPersistenceUnit.users,1800);
properties.put(h4m.expiry.seconds.userPersistenceUnit.certificates,1800);

更新-II



           netstat -na |找到11211
TCP 0.0.0.0:11211 0.0.0.0:0 LISTENING
TCP [::]:11211 [::]:0 LISTENING
UDP 0.0.0.0:11211 *: *

显示memcached正在运行的应用程序日志。

  16:20:25.893 [localhost-startStop-7] DEBUG ucosvdconfig.CertificateConfig  - 创建certificateDataSource 
{h4m .expiry.seconds.userPersistenceUnit.users = 1800,hibernate.hbm2ddl.auto = validate,h4m.adapter.spymemcached.operation.timeout.millis = 5000,hibernate.dialect = org.hibernate.dialect.MySQL5Dialect,hibernate.cache.use_structured_entries = false,hibernate.cache.use_query_cache = true,h4m.expiry.seconds.userPersistenceUnit.certificates = 1800,h4m.adapter.spymemcached.kryotranscoder.compression.threashold.bytes = 20000,h4m.adapter.spymemcached.hashalgorithm = KETAMA_HASH,h4m .adapter.class = kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter,hibernate.cache.default_cache_concurrency_strategy = NONSTRICT_READ_WRITE,h4m.adapter.spymemcached.cachekey.prefix = validatorUser,h4m.adapter.spymemcached.hosts = localhost:11211,hibernate .cache.use_second_level_cache = true,hibernate.cache.region_pre
fix = userPersistenceUnit,h4m.timestamper.cla ss = kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl,hibernate.cache.region.factory_class = kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory,h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache = 3600,h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache = 86400,h4m.expiry.seconds = 600,h4m.adapter.spymemcached.transcoder = kr.pe.kwonnam.hibernate4memcached.spymemcached.KryoTranscoder}
16:20:26.201 [localhost-startStop-7]信息osojLocalContainerEntityManagerFactoryBean - 为持久性单元'userPersistenceUnit'构建JPA容器EntityManagerFactory
16:20:26.242 [localhost-startStop-7]信息ohjpa。 internal.util.LogHelper - HHH000204:处理PersistenceUnitInfo [
名称:userPersistenceUnit
...]
16:20:26.502 [localhost-startStop-7] INFO org.hibernate.Version - HHH000412 :Hibernate Core {4.3.8.Final}
16:20:26.5 06 [localhost-startStop-7] INFO org.hibernate.cfg.Environment - HHH000206:找不到hibernate.properties
16:20:26.511 [localhost-startStop-7] INFO org.hibernate.cfg.Environment - HHH000021 :字节码提供程序名称:javassist
16:20:27.193 [localhost-startStop-7]信息ohannotations.common.Version - HCANN000001:Hibernate Commons Annotations {4.0.5.Final}
16:20: 27.657 [localhost-startStop-7] INFO org.hibernate.dialect.Dialect - HHH000400:使用方言:org.hibernate.dialect.MySQL5Dialect
16:20:28.223 [localhost-startStop-7]信息ohhiaASTQueryTranslatorFactory - HHH000397 :使用ASTQueryTranslatorFactory
2015-11-26 16:20:28.412信息net.spy.memcached.MemcachedConnection:添加{QA sa = localhost / 127.0.0.1:11211,#Rops = 0,#Wops = 0,# iq = 0,topRop = null,topWop = null,toWrite = 0,interested = 0}连接队列
2015-11-26 16:20:28.427 INFO net.spy.memcached.MemcachedConnection:连接状态已更改为sun.nio.ch.SelectionKeyImpl@1da36e8
16:20:2 8.432 [localhost-startStop-7]信息ohcache.spi.UpdateTimestampsCache - HHH000250:在地区启动更新时间戳缓存:userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache
16:20:28.438 [localhost-startStop- 7] INFO kpkhrGeneralDataMemcachedRegion - 缓存区域的expirySeconds [userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache] - 86400秒。
16:20:28.443 [localhost-startStop-7]信息ohcinternal.StandardQueryCache - HHH000248:在地区启动查询缓存:userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache
16:20:28.445 [localhost-startStop-7]信息kpkhrGeneralDataMemcachedRegion - 缓存区域的expirySeconds [userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache] - 3600秒。
16:20:28.745 [localhost-startStop-7] INFO k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800秒。
16:20:28.973 [localhost-startStop-7] INFO k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800秒。
16:20:29.021 [localhost-startStop-7] INFO k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800秒。
16:20:29.024 [localhost-startStop-7]信息k.p.k.h.r.GeneralDataMemcachedRegion - 缓存区域[userPersistenceUnit.users]的expirySeconds - 1800秒。
16:20:29.328 [localhost-startStop-7]信息ohtool.hbm2ddl.SchemaValidator - HHH000229:运行模式验证程序
16:20:29.329 [localhost-startStop-7]信息ohtool.hbm2ddl .SchemaValidator - HHH000102:获取数据库元数据
16:20:29.374 [localhost-startStop-7]信息ohtool.hbm2ddl.TableMetadata - HHH000261:Table found:user.roleprivilege

我也停止了memcached并尝试着,然后在启动应用程序时收到连接失败日志。

解决方案

您是否尝试添加如下内容:

  Properties p = new属性(); 
p.put(hibernate.ejb.entitymanager_factory_name,customerEntityManager);
em.setJpaProperties(p);

或类似于 application.properties 如果您可以吗?


I want to manage mutiple DataSource using your Application Servers built-in features and access it using JNDI. I am using Spring boot with Spring JPA data. I am able to configure the application.properties for single datasource. But while trying to do the same for mutiple datasource, I am getting an exception while starting the application.

Exception while starting the tomcat server:-

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1902f8f': Cannot resolve reference to bean 'entityManagerFactory' while settin
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
        ... 115 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1168)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:281)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
        ... 123 more

Please find below the code samples

Properties file has the below configuration:-

datasource.primary.jndi-name=jdbc/employee
datasource.primary.expected-type=javax.sql.DataSource
datasource.secondary.jndi-name=jdbc/customer
datasource.secondary.expected-type=javax.sql.DataSource

I am sure on the configuration in context.xml file:-

 <Resource name="jdbc/customer" auth="Container" type="javax.sql.DataSource"
                   maxTotal="100" maxIdle="30" maxWaitMillis="10000"
                   username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost:3306/customer"/>

 <Resource name="jdbc/employee" auth="Container" type="javax.sql.DataSource"
                   maxTotal="100" maxIdle="30" maxWaitMillis="10000"
                   username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost:3306/employee"/>

Added the below to Spring boot config class:-

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class })

Customer configuration class:-

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    basePackages = "dao.repository.customer",
    entityManagerFactoryRef = "customerEntityManager", 
    transactionManagerRef = "customerTransactionManager"
)
public class customerConfig {


    @Bean
    public LocalContainerEntityManagerFactoryBean customerEntityManager() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(customerDataSource());
        em.setPackagesToScan(new String[] { "dao.entity.customer" });
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        return em;
    }

    @Bean
    @ConfigurationProperties(prefix = "datasource.secondary")
    public DataSource customerDataSource() {
      final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
      dsLookup.setResourceRef(true);
      DataSource dataSource = dsLookup.getDataSource("jdbc/customer");
      return dataSource;

    }

    @Bean
    public PlatformTransactionManager customerTransactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(customerEntityManager().getObject());
        return transactionManager;
    }
}

The employee configuartion class

 @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(
        basePackages = "dao.repository.employee",
        entityManagerFactoryRef = "employeeEntityManager", 
        transactionManagerRef = "employeeTransactionManager"
    )
    public class employeeConfig {


        @Bean
        @Primary
        public LocalContainerEntityManagerFactoryBean employeeEntityManager() {
            LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
            em.setDataSource(employeeDataSource());
            em.setPackagesToScan(new String[] { "dao.entity.employee" });
            HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
            em.setJpaVendorAdapter(vendorAdapter);
            return em;
        }

        @Bean
        @Primary
        @ConfigurationProperties(prefix = "datasource.primary")
        public DataSource employeeDataSource() {
          final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
          dsLookup.setResourceRef(true);
          DataSource dataSource = dsLookup.getDataSource("jdbc/employee");
          return dataSource;

        }

        @Bean
        @Primary
        public PlatformTransactionManager employeeTransactionManager() {
            JpaTransactionManager transactionManager = new JpaTransactionManager();
            transactionManager.setEntityManagerFactory(employeeEntityManager().getObject());
            return transactionManager;
        }
    }

In the entity classes I am mentioning the schema name.

@Entity
@Table(schema="customer")
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User implements Serializable {
.........
}

@Entity
 @Table(schema="employee")

 public class Project implements Serializable {
    .........
 }

Update

I have moved a bit more on this but still not resolved.

Caused by: net.spy.memcached.OperationTimeoutException: Mutate operation timed out,unable to modify counter [validator.validatorCache.HibernateCacheTimestamperMemcachedImpl:timestamp]
        at net.spy.memcached.MemcachedClient.mutate(MemcachedClient.java:1663) ~[spymemcached-2.10.2.jar:2.10.2]
        at net.spy.memcached.MemcachedClient.mutateWithDefault(MemcachedClient.java:1835) ~[spymemcached-2.10.2.jar:2.10.2]
        at net.spy.memcached.MemcachedClient.incr(MemcachedClient.java:1767) ~[spymemcached-2.10.2.jar:2.10.2]
        at kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter.increaseCounter(SpyMemcachedAdapter.java:185) ~[hibernate4-memcached-spymemcached-adapter-0.7.jar:na]
        at kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl.next(HibernateCacheTimestamperMemcachedImpl.java:59) ~[hibernate4-memcached-core-0.7.jar:na]
        at kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory.nextTimestamp(Hibernate4MemcachedRegionFactory.java:127) ~[hibernate4-memcached-core-0.7.jar:na]
        at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1589) ~[hibernate-core-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.internalGetSession(EntityManagerImpl.java:141) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.isOpen(EntityManagerImpl.java:165) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:101) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.checkOpen(EntityManagerImpl.java:96) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.getSession(EntityManagerImpl.java:111) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.setDefaultProperties(AbstractEntityManagerImpl.java:308) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:213) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:91) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:345) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313) ~[hibernate-entitymanager-4.3.8.Final.jar:4.3.8.Final]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_20]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_20]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_20]
        at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_20]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:388) ~[spring-orm-4.0.9.RELEASE.jar:4.0.9.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:541) ~[spring-orm-4.0.9.RELEA
        at com.sun.proxy.$Proxy558.createEntityManager(Unknown Source) ~[na:na]
        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:285) ~[spring-orm-4.0.9.RELEASE.jar:4.0.9.RELEASE
        at com.sun.proxy.$Proxy559.getDelegate(Unknown Source) ~[na:na]
        at org.springframework.data.jpa.provider.JpaClassUtils.isEntityManagerOfType(JpaClassUtils.java:46) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.data.jpa.provider.PersistenceProvider.fromEntityManager(PersistenceProvider.java:296) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.<init>(JpaRepositoryFactory.java:57) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.createRepositoryFactory(JpaRepositoryFactoryBean.java:79) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.doCreateRepositoryFactory(JpaRepositoryFactoryBean.java:69) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.TransactionalRepositoryFactoryBeanSupport.createRepositoryFactory(TransactionalRepositoryFactoryBeanSupport.java:72) ~[spring-data-
        at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:216) ~[spring-data-commons-1.10.0.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.8.0.RELEASE.jar:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) ~[spring-beans-4.1.6.RELEASE.jar:4.1.6.REL
        ... 112 common frames omittedenter code here
    enter code here

I am setting the bwlo properties to LocalContainerEntityManagerFactoryBean object:-

 HashMap<String, Object> properties = new HashMap<String, Object>();        
    properties.put("hibernate.hbm2ddl.auto", "validate");
    properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

    properties.put("hibernate.cache.use_second_level_cache", "true");
    properties.put("hibernate.cache.use_query_cache", "true");
    properties.put("hibernate.cache.region.factory_class", "kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory");
    properties.put("hibernate.cache.default_cache_concurrency_strategy", "NONSTRICT_READ_WRITE");
    properties.put("hibernate.cache.region_prefix", "userPersistenceUnit");
    properties.put("hibernate.cache.use_structured_entries", "false");
    properties.put("h4m.adapter.class", "kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter");
    properties.put("h4m.timestamper.class", "kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl");

    properties.put("h4m.adapter.spymemcached.hosts", "localhost:11211");
    properties.put("h4m.adapter.spymemcached.hashalgorithm", "KETAMA_HASH");
    properties.put("h4m.adapter.spymemcached.operation.timeout.millis", "5000");
    properties.put("h4m.adapter.spymemcached.transcoder", "kr.pe.kwonnam.hibernate4memcached.spymemcached.KryoTranscoder");
    properties.put("h4m.adapter.spymemcached.cachekey.prefix", "validator");
    properties.put("h4m.adapter.spymemcached.kryotranscoder.compression.threashold.bytes", "20000");


    properties.put("h4m.expiry.seconds", "600");
    properties.put("h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache", "86400");
    properties.put("h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache", "3600");
    properties.put("h4m.expiry.seconds.userPersistenceUnit.users", "1800");
    properties.put("h4m.expiry.seconds.userPersistenceUnit.certificates", "1800");

Update -II

Memcahe is up and running..

C:\windows\system32>netstat -na | find "11211"
  TCP    0.0.0.0:11211          0.0.0.0:0              LISTENING
  TCP    [::]:11211             [::]:0                 LISTENING
  UDP    0.0.0.0:11211          *:*

Application log that shows that memcached is running.

    16:20:25.893 [localhost-startStop-7] DEBUG u.c.o.s.v.d.config.CertificateConfig - Creating certificateDataSource
{h4m.expiry.seconds.userPersistenceUnit.users=1800, hibernate.hbm2ddl.auto=validate, h4m.adapter.spymemcached.operation.timeout.millis=5000, hibernate.dialect=org.hibernate.dialect.MySQL5Dialect, hibernate.cache.use_structured_entries=false, hibernate.cache.use_query_cache=true, h4m.expiry.seconds.userPersistenceUnit.certificates=1800, h4m.adapter.spymemcached.kryotranscoder.compression.threashold.bytes=20000, h4m.adapter.spymemcached.hashalgorithm=KETAMA_HASH, h4m.adapter.class=kr.pe.kwonnam.hibernate4memcached.spymemcached.SpyMemcachedAdapter, hibernate.cache.default_cache_concurrency_strategy=NONSTRICT_READ_WRITE, h4m.adapter.spymemcached.cachekey.prefix=validatorUser, h4m.adapter.spymemcached.hosts=localhost:11211, hibernate.cache.use_second_level_cache=true, hibernate.cache.region_pre
fix=userPersistenceUnit, h4m.timestamper.class=kr.pe.kwonnam.hibernate4memcached.timestamper.HibernateCacheTimestamperMemcachedImpl, hibernate.cache.region.factory_class=kr.pe.kwonnam.hibernate4memcached.Hibernate4MemcachedRegionFactory, h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache=3600, h4m.expiry.seconds.userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache=86400, h4m.expiry.seconds=600, h4m.adapter.spymemcached.transcoder=kr.pe.kwonnam.hibernate4memcached.spymemcached.KryoTranscoder}
16:20:26.201 [localhost-startStop-7] INFO  o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'userPersistenceUnit'
16:20:26.242 [localhost-startStop-7] INFO  o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
        name: userPersistenceUnit
        ...]
16:20:26.502 [localhost-startStop-7] INFO  org.hibernate.Version - HHH000412: Hibernate Core {4.3.8.Final}
16:20:26.506 [localhost-startStop-7] INFO  org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
16:20:26.511 [localhost-startStop-7] INFO  org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
16:20:27.193 [localhost-startStop-7] INFO  o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
16:20:27.657 [localhost-startStop-7] INFO  org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
16:20:28.223 [localhost-startStop-7] INFO  o.h.h.i.a.ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory
2015-11-26 16:20:28.412 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2015-11-26 16:20:28.427 INFO net.spy.memcached.MemcachedConnection:  Connection state changed for sun.nio.ch.SelectionKeyImpl@1da36e8
16:20:28.432 [localhost-startStop-7] INFO  o.h.cache.spi.UpdateTimestampsCache - HHH000250: Starting update timestamps cache at region: userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache
16:20:28.438 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.org.hibernate.cache.spi.UpdateTimestampsCache] - 86400 seconds.
16:20:28.443 [localhost-startStop-7] INFO  o.h.c.internal.StandardQueryCache - HHH000248: Starting query cache at region: userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache
16:20:28.445 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.org.hibernate.cache.internal.StandardQueryCache] - 3600 seconds.
16:20:28.745 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800 seconds.
16:20:28.973 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800 seconds.
16:20:29.021 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800 seconds.
16:20:29.024 [localhost-startStop-7] INFO  k.p.k.h.r.GeneralDataMemcachedRegion - expirySeconds of cache region [userPersistenceUnit.users] - 1800 seconds.
16:20:29.328 [localhost-startStop-7] INFO  o.h.tool.hbm2ddl.SchemaValidator - HHH000229: Running schema validator
16:20:29.329 [localhost-startStop-7] INFO  o.h.tool.hbm2ddl.SchemaValidator - HHH000102: Fetching database metadata
16:20:29.374 [localhost-startStop-7] INFO  o.h.tool.hbm2ddl.TableMetadata - HHH000261: Table found: user.roleprivilege

I also stoped memcached and tried, then i am getting connection failure log while starting the application.

解决方案

Did you try to add something like this:

    Properties p = new Properties();
    p.put("hibernate.ejb.entitymanager_factory_name", "customerEntityManager");
    em.setJpaProperties(p);

or similar from application.properties if you can?

这篇关于多个数据库+ JNDI与Spring数据JPA初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆