Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring4上参数化数据源属性?_Java_Spring_Spring Mvc_Spring Data - Fatal编程技术网

Java 如何在Spring4上参数化数据源属性?

Java 如何在Spring4上参数化数据源属性?,java,spring,spring-mvc,spring-data,Java,Spring,Spring Mvc,Spring Data,我使用的是Spring 4.16。我想参数化我的持久性数据。这是我现在的配置: @Configuration @EnableTransactionManagement public class PersistenceConfiguration { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFacto

我使用的是Spring 4.16。我想参数化我的持久性数据。这是我现在的配置:

@Configuration
@EnableTransactionManagement
public class PersistenceConfiguration {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
        entityManager.setDataSource(this.dataSource());
        entityManager.setPackagesToScan(new String[] {"com.example.movies.domain"});
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        entityManager.setJpaVendorAdapter(vendorAdapter);
        entityManager.setJpaProperties(this.properties());
        return entityManager;
    }

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/sarasa_db");
    dataSource.setUsername("root");
    dataSource.setPassword("mypassword");
    return dataSource;
}

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

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

    private Properties properties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "update");
        properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        properties.setProperty("hibernate.show_sql", "false");
        return properties;
    }

}
我想对application.properties进行参数化,尽我所能。首先,我想输入datasource属性(正如我所读到的,spring可能会自动构建我的datasource,但显然这只是使用JdbcTemplate…):

而且,如果可能的话,所有属性的属性,我在文档中找不到

你知道我怎么做吗


编辑 这是我的DAO实现

@Configuration
@Import(PersistenceConfiguration.class)
public class DAOConfiguration {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public ClientDAO clientDAO() {
        SimpleJpaRepository<Client, String> support = this.getSimpleJpaRepository(Client.class);
        return new MySQLClientDAO(support);
    }

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    @Description("Hibernate repository helper")
    protected <T> SimpleJpaRepository<T, String> getSimpleJpaRepository(Class<T> domainClass) {
        return new SimpleJpaRepository<T, String>(domainClass, this.entityManager);
    }

}
@配置
@导入(PersistenceConfiguration.class)
公共类配置{
@持久上下文
私人实体管理者实体管理者;
@豆子
公共ClientDAO ClientDAO(){
SimpleJpaRepository support=this.getSimpleJpaRepository(Client.class);
返回新的MySQLClientDAO(支持);
}
@豆子
@范围(BeanDefinition.Scope\u原型)
@说明(“Hibernate存储库帮助程序”)
受保护的SimpleParepository GetSimpleParepository(类domainClass){
返回新的SimpleParepository(domainClass,this.entityManager);
}
}

您可以这样做:

首先在Spring配置的某个地方定义
propertySourcesplacePlaceholderConfigurer
bean:

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
    ppc.setLocation(new ClassPathResource("application.properties"));
    return ppc;
}
此配置假定
application.properties
文件位于类路径的根目录下

设置属性占位符配置器后,您可以访问数据库配置类中的属性,如下所示:

@Configuration
@EnableTransactionManagement
public class PersistenceConfiguration {

    @Value("${spring.datasource.url}")
    private String jdbcUrl;
    // ...

    @Bean
    public DataSource dataSource() {
       DriverManagerDataSource dataSource = new DriverManagerDataSource();
       dataSource.setUrl(jdbcUrl);
       // ...
    }
}

如果您想要一个简单的方法来参数化所有属性,您应该看看。它使用
application.properties
文件自动创建具有这些属性的数据源以及许多其他内容。这可能是您在问题中提到的自动创建数据源。

您是否碰巧使用了Spring Boot?谢谢您的回答。但是顺便说一下,如果我想添加属性,例如,我必须触摸配置。这就是为什么我想用application.context自动完成它,所以Spring读取属性并创建包含所有传统属性的数据源…@user2601512如果您希望Spring基于application.properties为您创建数据源和其他bean,您可能希望使用Spring Boot,正如我在回答末尾提到的:)Ohhh这正是我想要的。我的意思是我以前看过,但我认为它只是为春季jbdc设计的。谢谢
@Configuration
@EnableTransactionManagement
public class PersistenceConfiguration {

    @Value("${spring.datasource.url}")
    private String jdbcUrl;
    // ...

    @Bean
    public DataSource dataSource() {
       DriverManagerDataSource dataSource = new DriverManagerDataSource();
       dataSource.setUrl(jdbcUrl);
       // ...
    }
}