连接到多个数据库春季启动

Virat:

我需要连接到两台数据库在我的项目。所以,我创建了两个配置文件。

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories( basePackages = {"com.virat.webservices.datastore.v1.Repo" } )
@EntityScan("com.virat.webservices.datastore.v1.Model")
public class V1DBConfig {

@Primary
@Bean( name = "dataSource" )
@ConfigurationProperties( prefix = "v1.datasource" )
public DataSource dataSource()
{
    return DataSourceBuilder.create().build();
}

@Primary
@Bean( name = "entityManagerFactory" )
public LocalContainerEntityManagerFactoryBean entityManagerFactory( EntityManagerFactoryBuilder builder,
        @Qualifier( "dataSource" ) DataSource dataSource )
{
    return builder.dataSource(dataSource).packages("com.virat.webservices.datastore.v1.Model")
            .persistenceUnit("db1").build();
}

@Primary
@Bean( name = "transactionManager" )
public PlatformTransactionManager transactionManager(
        @Qualifier( "entityManagerFactory" ) EntityManagerFactory entityManagerFactory )
{
    return new JpaTransactionManager(entityManagerFactory);
}
}

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories( entityManagerFactoryRef = "v2EntityManagerFactory", transactionManagerRef = "v2TransactionManager",    basePackages = {
    "com.virat.datastore.repository" } )
@EntityScan( "com.virat.datastore.model" )
public class V2DBConfig {

@Bean( name = "v2DataSource" )
@ConfigurationProperties( prefix = "spring.datasource" )
public DataSource dataSource()
{
    return DataSourceBuilder.create().build();
}

@Bean( name = "v2EntityManagerFactory" )
public LocalContainerEntityManagerFactoryBean barEntityManagerFactory( EntityManagerFactoryBuilder builder,
        @Qualifier( "v2DataSource" ) DataSource dataSource )
{
    return builder.dataSource(dataSource).packages("com.virat.model")
            .persistenceUnit("db2").build();
}

@Bean( name = "v2TransactionManager" )
public PlatformTransactionManager barTransactionManager(
        @Qualifier( "v2EntityManagerFactory" ) EntityManagerFactory barEntityManagerFactory )
{
    return new JpaTransactionManager(barEntityManagerFactory);
}
}

我配置了我的application.properties文件,

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db2?      useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=fal.   se&serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=
#spring.datasource.pool.size=20
v1.datasource.driver-class-name=com.mysql.jdbc.Driver
v1.datasource.url=jdbc:mysql://localhost:3306/db1?     useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=fal.   se&serverTimezone=UTC&useSSL=false
v1.datasource.username=root
v1.datasource.password=
#v1.datasource.pool.size=20
spring.jpa.properties.hibernate.id.new_generator_mappings=false
v1.jpa.properties.hibernate.id.new_generator_mappings=false
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

但是,当我运行应用程序,以下异常已被抛出。

***************************
APPLICATION FAILED TO START
***************************

Description:

Field entityManager in com.highpeak.tlp.webservices.services.impl.TaskServiceImpl required a single bean, but 2 were found:
    - org.springframework.orm.jpa.SharedEntityManagerCreator#0: defined by method 'createSharedEntityManager' in null
    - org.springframework.orm.jpa.SharedEntityManagerCreator#1: defined by method 'createSharedEntityManager' in null


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

 org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter:42 - 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field entityManager in com.highpeak.tlp.webservices.services.impl.TaskServiceImpl required a single bean, but 2 were found:
    - org.springframework.orm.jpa.SharedEntityManagerCreator#0: defined by method 'createSharedEntityManager' in null
    - org.springframework.orm.jpa.SharedEntityManagerCreator#1: defined by method 'createSharedEntityManager' in null


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

Disconnected from the target VM, address: '127.0.0.1:56875', transport: 'socket'

Process finished with exit code 1

我无法确定是什么错误。我有两个模块。repositoryentity类一个数据库是一个模块和另一个模块的其它数据库中的类英寸 这是造成问题?

编辑

我的 TaskServiceImpl.java

package com.virat.webservices.services.impl;


@Service
public class TaskServiceImpl implements TaskService {

    private static final Logger LOGGER = LoggerFactory.getLogger(TaskServiceImpl.class);

    @Autowired
    @PersistenceContext(unitName = "v2EntityManagerFactory")
    private EntityManager entityManager;

    @Value( "${file.base.path}" )
    private String basePath;

    @Value( "${application.domain}" )
    private String applicationDomain;

    @Value( "${application.protocol}" )
    private String applicationProtocol;

    @Value( "${server.port}" )
    private String serverPort;

    @Override
    @SuppressWarnings( "unchecked" )
    @Transactional( rollbackOn = DataException.class )
    public Integer doSomething( SomeObject someObject,
            UserAccessDetails userAccessDetails ) throws DataException
    {
        try
        {
            // Do input validations
            if( NullEmptyUtils.isNull(userAccessDetails) || NullEmptyUtils.isNull(someObject) )
            {

                throw new DataException(GeneralConstants.EXCEPTION, GeneralConstants.NULL_INPUT_ERROR,
                        HttpStatus.BAD_REQUEST);
            }

            // Creates a native mysql query based on the contents of lawyerDiscoveryParamsBean
            /* Should be replaced with criteria API */
            String generatedQuery = DynamicQueryGenerator.getDynamicQuery(someObject, owner);
            LOGGER.info("Generated query: {}", generatedQuery);
            Query executableQuery = entityManager.createNativeQuery(generatedQuery, UserModel.class);

            List<UserModel> userModels = executableQuery.getResultList();

            if( userModels.isEmpty() )
            {

                return 0;
            }

            return 1;

        }
        catch( DataException e )
        {
            LOGGER.error(GeneralConstants.ERROR, e);
            throw e;
        }
        catch( Exception e )
        {
            LOGGER.error(GeneralConstants.ERROR, e);
            throw new DataException(GeneralConstants.EXCEPTION, GeneralConstants.SOMETHING_WENT_WRONG,
                    HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

}
Naanavanalla:

V1DBConfig.java中,标注@EnableJpaRepository实际上应该是这样的,

@EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager", basePackages = {
        "com.virat.webservices.datastore.v1.Repo" } )

你已经做在类的配置权V2DBConfig.java(看那@EnableJpaRepository注释)。做同样的事情V1DBConfig.java

然后,在你的TaskServiceImpl.java提供PersistenceContext,通过为应答@丹我希望这有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Scala 中连接到多个数据库

PDO-连接到多个数据库

如何使用JPA连接到多个数据库?

如何允许Tomcat连接到多个数据库?

R:从R Studio连接到多个数据库

QtSql连接到多个数据库

NestJS/TypeORM - 连接到多个数据库 - ConnectionNotFoundError

在春季启动中连接到多个mongo数据库主机并使用其他数据库进行身份验证

码头工人撰写:春季启动连接到mysql数据库被拒绝

春季启动不会使用Intellij连接到MYSQL数据库

春季测试想要连接到数据库

在春季使用JDBC连接到derby数据库

流星服务器专用Web应用程序连接到多个数据库

如何使用NHibernate在单个应用程序中连接到多个数据库?

在Go中连接到多个数据库的最佳做法是什么?

如何使用knex.js连接到多个数据库?

Flask-SQLAlchemy-快速连接到多个数据库

在PHP中连接到不同服务器上的多个数据库

通过Entity Framework Core将多个数据库连接到.NET Core项目

Rails:使用SQL查询连接到多个数据库

使用Hibernate连接到两个数据库

麻烦连接到MySQL数据库与Spring启动

Spring-data-mongodb在一个Mongo实例中连接到多个数据库

SailsJS - 连接到多个数据库时出错:错误:“SELEC”处或附近的语法错误

如何使用和尚连接到多个MongoDB数据库?

连接到数据库,多个平台的可能选项

如何在JPA中连接多个数据库?

yii2上的多个数据库连接

多个数据库连接和Yii 2.0