spring配置中无法读取$driverClassName,properties文件能加装,但是不能读取driverClassName内容?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring配置中无法读取$driverClassName,properties文件能加装,但是不能读取driverClassName内容?相关的知识,希望对你有一定的参考价值。

似乎是EL表达式不起作用 而是把$driverClassName当成字符串来处理了,是怎么回事???请高人指点。。。

参考技术A 能加载属性文件么?如果能加载的话,看看文件里有没有driverClassName这个属性。注意大小写。另外一个是$driverClassName这个el里没有空格的。也注意下。追问

spring配置文件:

classpath:oracle.properties

追答

看到
classpath:oracle.properties

这一行了。文件名没有写错没,而且文件路径对么,对应的是classpath,那就得放在src或者
WEB-INF/下的classes下。然后就是跟上边说的那样,检查每一个el里的参数名都对应后没,有多于空格没。

参考技术B WEB-INF/下的applicationContext.xml文件
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="$driverClass" />
<property name="jdbcUrl"
value="$jdbcUrl" />
<property name="user" value="$user" />
<property name="password" value="$password" />
</bean>
jdbc.properties文件放在src下面
参考技术C EL表达式没有问题,只要你的属性文件里面写的是键=值对,就一定可以,我怀疑你的属性文件没有加载!还是看看这方面吧,一般情况属性文件都不会出问题追问

是放在src目录下的
oracle.properties配置:
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.0.10:1521:test
username=root
password=root

参考技术D mark追问

spring配置2:

Spring Boot 无法从配置文件特定的 yaml 文件中读取

【中文标题】Spring Boot 无法从配置文件特定的 yaml 文件中读取【英文标题】:Spring boot unable to read from profile specific yaml file 【发布时间】:2018-03-05 06:15:34 【问题描述】:

我在玩 spring boot 并试图创建一个配置文件特定的配置文件。我叫它application-local.yml

并补充:

spring:
 profiles:
  active: local

 mysql:
  db:
   url: jdbc:mysql://localhost:3306/db?serverTimezone=UTC
   driverClassName: com.mysql.jdbc.Driver
   username: root
   password:

hibernate:
 dialect: org.hibernate.dialect.MySQL5Dialect
 show_sql: false

server:
 port: 8080

在我的 DatabaseConfig.java 文件中,我尝试从 application-local.yml 读取并配置数据库:

@Configuration
@EnableTransactionManagement
public class DatabaseConfig 

    @Value("$spring.mysql.db.url")
    private String url;

    @Value("$spring.mysql.db.username")
    private String userName;

    @Value("$spring.mysql.db.password")
    private String password;

    @Value("$spring.mysql.db.driverClassName")
    private String driverClassName;

    //hibernate
    @Value("$hibernate.dialect")
    private String hibernateDialect;

    @Value("$hibernate.show_sql")
    private String hibernateShowSql;

    @Bean
    public DataSource dataSource() 
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;
    

    @Bean(name="entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() 
        LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean =
                new LocalContainerEntityManagerFactoryBean();
        localContainerEntityManagerFactoryBean.setDataSource(dataSource());
        localContainerEntityManagerFactoryBean.setPackagesToScan("xxxx");

        JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        localContainerEntityManagerFactoryBean.setJpaProperties(hibernateProperties());
        return localContainerEntityManagerFactoryBean;
    

    @Bean
    public PlatformTransactionManager platformTransactionManager() 
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    

    private Properties hibernateProperties() 
        Properties properties = new Properties();
        properties.put("hibernate.dialect", hibernateDialect);
        properties.put("hibernate.show_sql", hibernateShowSql);
        return properties;
    

现在我得到了它无法解决的错误

创建名为“databaseConfig”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 java.lang.IllegalArgumentException:无法解析值“$spring.mysql.db.url”中的占位符“spring.mysql.db.url”

但是当我将我的属性文件重命名为application.yml 时。它工作得很好。

我还尝试使用 gradle 命令从终端运行:./gradlew -Dspring.profiles.active=local bootRun,但我得到了同样的错误。它仅在我将 YAML 文件重构为 application.yml 时才有效。我究竟做错了什么?我打算拥有 3 个配置文件,例如本地、开发和产品。

【问题讨论】:

如果你使用的是spring boot,那你为什么不使用数据源自动配置呢? 【参考方案1】:

在你的 gradle 文件中添加以下内容

bootRun 
  profile: local

或者试试

./gradlew bootRun -Dspring.profiles.active=local

【讨论】:

【参考方案2】:

我有同样的问题。我通过添加解决了它

Spring:
  profiles: local

请确保其缩进正确。

【讨论】:

以上是关于spring配置中无法读取$driverClassName,properties文件能加装,但是不能读取driverClassName内容?的主要内容,如果未能解决你的问题,请参考以下文章

Spring 应用程序无法加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver]

spring无法读取properties文件数据

Spring Boot 无法从配置文件特定的 yaml 文件中读取

无法在 spring-boot 应用程序中从 Consul 读取配置

spring配置中无法读取$driverClassName,properties文件能加装,但是不能读取driverClassName内容?

Could not load driverClass jdbc:mysql://localhost:3306/spring