当前位置: 首页 > 知识库问答 >
问题:

使用SpringData设置2个没有bean注释的数据库时出错

谷梁玺
2023-03-14

当我尝试在xml applicationContext中配置2个数据源时,我遇到了问题。xml。我发现reffer使用bean注释进行配置。我需要在我的实际架构中使用xml进行配置。

我看到教程

http://www.baeldung.com/spring-data-jpa-multiple-databases

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasources

但是我没有解决我的问题,这个Spring页面中使用的方法使用注释。我不能使用注释,我的配置在xml中。当我尝试应用seconf数据源时出错。

在添加第二个数据源之前,工作正常!添加第二个数据源时不起作用。

我的申请ontext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:task="http://www.springframework.org/schema/task" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
                        http://www.springframework.org/schema/jee 
                        http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
                        http://www.springframework.org/schema/util 
                        http://www.springframework.org/schema/util/spring-util-4.2.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
                        http://www.springframework.org/schema/task 
                        http://www.springframework.org/schema/task/spring-task-4.2.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-4.2.xsd
                        http://www.springframework.org/schema/data/jpa 
                        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"
    default-autowire="byName" default-lazy-init="true">

    <context:annotation-config />

    <context:component-scan base-package="br.com.myProject" />

    <jpa:repositories base-package="br.com.myProject.ged.repository"/>

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
        <property name="jndiName" value="java:jboss/datasources/sgedDS" />
        <property name="resourceRef" value="true" />    
    </bean>

    <bean id="dataSourceNurer" class="org.springframework.jndi.JndiObjectFactoryBean"  scope="singleton">
        <property name="jndiName" value="java:jboss/datasources/nurerDS" />
        <property name="resourceRef" value="true" />    
    </bean>


    <!--  ************** ENTITY MANAGER SGED ******************** -->

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan" value="br.com.myProject.ged.entity" />
        <property name="dataSource" ref="dataSource" />  
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>

        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">false</prop>
            </props>
        </property>
    </bean>

    <!--  ************** ENTITY NURER NURER ******************** -->    

    <bean id="entityManagerFactoryNurer" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan" value="br.com.myProject.ged.entity" />
        <property name="dataSource" ref="dataSourceNurer" /> 

        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>

        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">false</prop>
            </props>
        </property>
    </bean>

    <!--  ******** SGED  ******** -->

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!--  ******** NURER  ******** -->

    <bean id="transactionManagerNurer" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactoryNurer" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" /> <!-- SGED -->
    <tx:annotation-driven transaction-manager="transactionManagerNurer" /> <!-- NURER -->


    <bean id="persistenceExceptionTranslationPostProcessor" 
          class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="view">
                    <bean class="br.com.myProject.ged.spring.SpringViewScope" />
                </entry>
            </map>
        </property>
    </bean>

</beans>

我的Bean服务层:

@Transactional (transactionManager = "transactionManager2")
    public List<DataBase2Entity> getAll(){
        return nurerSituacaoIdrRepository.findAll();
        // return new ArrayList<DataBase2Entity>();
    }


@Transactional (transactionManager = "transactionManager")
    public List<DataBaseEntity> getAll(){
        return nurerSituacaoIdrRepository.findAll();
        // return new ArrayList<DataBaseEntity>();
    }

我的BaseDao.java

public abstract class BaseDao<T>  {

    private Class<T> entityClass;

    @PersistenceContext(unitName = "entityManagerFactory")
    private EntityManager em;


    @PersistenceContext(unitName = "entityManagerFactoryNurer")
    private EntityManager emNurer;

    @SuppressWarnings("unchecked")
    public BaseDao() {
        this.entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }

...

更新日期:2017年10月2日错误执行时间:

Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values

我使用相同的entityManagerFactory或创建另一个entityManagerFactory(请参见BaseDao.java)。

共有1个答案

养星汉
2023-03-14

这似乎是XML的问题。我看到第105行末尾有一个(点)

<代码>

删除点,然后重试。

 类似资料:
  • 我已经使用Spring几十年了,但以前从未遇到过这个用例。 是否有方法注入所有带特定注释的bean,例如,所有带服务的bean或所有带自定义注释的bean? 我唯一的想法是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否公开了一种递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?

  • 我对AOP相当陌生。我正在尝试使用AspectJ在没有Spring的maven项目中创建注释。然而,我试图使用@方面调用的方法没有被调用。 这就是我的pom看起来的样子: 注释如下所示: 我为我的注释创建了一个注释处理器: } 我在这次通话中称之为: 我创建了一个aop。xml文件,并将其放置在与pom相同的文件夹中。xml。 当我调用createPurchase方法时,它在没有首先调用@Befo

  • 何时才能可靠地知道设置了新创建实体的字段,该字段带有注释? JPA规范对此并不是很具体。我见过类似的问题,但他们得到的答案却不一样,令人困惑。我知道一旦事务被提交,id就已经设置好了,但是如果事务还在运行,而我需要id怎么办呢? 我怎样才能可靠地得到它?

  • spring应用程序无法启动,因为它无法在配置类中找到一个带有@Service注释的类的bean。但只有在我使用@Transactional注释特定服务类中的方法时才会出现这种情况。为什么会这样?

  • 问题内容: 我想使用jsf批注和一些spring批注将spring bean /服务注入jsf托管bean。(在jsf bean上,我只想使用jsf批注)我不想使用的批注。 我试图在网上找到解决方案,但没有任何运气。 例 在不使用xml的情况下,这样的事情是可能的。例如,我不想使用类似 或在 是否可以在不使用config xml文件中的每个bean定义所有jsf bean /属性和spring B