localcontainerentitymanagerfactorybean

py49o6xq  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(446)

我已经阅读了springdatajpa参考文档,以在spring boot中配置数据源,并使用localcontainerentitymanagerfactorbean和transactionmanager..等,但运行时出错
但是我想配置一个mysql的数据源,一个数据源。这是配置类代码:

@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
public class DataSourceConfig {

   @Bean

   @ConfigurationProperties(prefix="oneslide.datasource")
   public DataSource dataSource() {

       return DataSourceBuilder.create().build();
   }

   @Bean 
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
       HibernateJpaVendorAdapter vendor=new HibernateJpaVendorAdapter();

       vendor.setGenerateDdl(true);

       LocalContainerEntityManagerFactoryBean factory=new LocalContainerEntityManagerFactoryBean();

       factory.setJpaVendorAdapter(vendor);

       factory.setPackagesToScan("com.oneslide.multiDataSource.domain");

       factory.setDataSource(dataSource());

       return factory;

   }

   @Bean 
   public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
       JpaTransactionManager transactionManager=new JpaTransactionManager();
       transactionManager.setEntityManagerFactory(entityManagerFactory);
       return transactionManager;
   }

}
我不想要用户 DatasourceBuilder.create.url().password().. 类似这样的链式调用,我只想将application.properties中的sql连接元数据与oneslide.datasource namespce.合并,并尝试使用localcontainerentitymanagerfactory bean,而不是使用教程中使用spring.datasource.*属性的方式。但当我运行它时,datasource debug info为null,它是异常日志的摘要:
调用init方法失败;嵌套异常为org.hibernate.service.spi.serviceexception:无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.jdbcenvironment]
:未设置“hibernate.dialect”时,对方言解析信息的访问不能为空
帮帮我谢谢。

yqkkidmi

yqkkidmi1#

你的注解 @ConfigurationProperties(prefix="oneslide.datasource") 请求sprint从外部配置获取信息,并将其与正在注解的bean绑定,即方法生成的结果。
但是带注解的bean必须具有接收配置值的属性。i、 它必须有字段和内部对象来复制您正在传递的配置(以及setter)的结构。
例如,如果您的配置包含以下内容:

oneslide.datasource.url = some_url
oneslide.datasource.user = usr
oneslide.datasource.password = pw
oneslide.datasource.special.detail = whatever

您构建的bean应该有字段“url”、“user”和“password”,以及带有字段“detail”的对象“special”,这样spring就可以设置这些值。简化某事 Y = X.getSpecial(); Y.setDetail() (对于空识别和对象创建,我想也要记住)。
如果你什么都不做。。。幕后的spring将创建一个datasourcepropertybean(毫不奇怪,它包含了通常用于在“spring.datasource”下用config info设置数据源的字段)。
您可以通过定义自己的bean来获取这个bean,该bean将它作为一个参数,如下所示:

public <whatever> getTheD_S_Properties(DataSourceProperties myDataSourceValesFromConfig) {
    ...do something with the bean you got, 
    that contains the values from your config...
}

在本例中,最常见的操作是自己构建数据源,除了从配置中分配值之外,还有一些逻辑。
如果您不需要做任何特殊的事情,那么也让spring来构建数据源。
坐下来好好享受吧!:)

c90pui9n

c90pui9n2#

我完全误解了SpringBoot,也许…..它会自动配置所有bean,比如localcontainerentitymanagerfactorybean!所以要使用多数据源,我只需要配置一个数据源,对吧???

相关问题