@value读取不到数据库配置文件里的值的解决办法

用@value注解的时候遇到过两次问题,下面说一下两次的解决思路
spring框架可以直接读取,前提是properties文件里有这些值

    jdbc_driver=com.mysql.jdbc.Driver
    jdbc_url=jdbc:mysql://localhost:3306/xxx
    jdbc_username=root
    jdbc_password=root
  import org.springframework.stereotype.Service;

    @Service(value = "sqlService")
    public class SqlServiceImpl implements SqlService {

        @Value("${jdbc_driver}")
        private String jdbcDriver;
        @Value("${jdbc_url}")
        private String jdbcUrl;
        @Value("${jdbc_username}")
        private String jdbcUsername;
        @Value("${jdbc_password}")
        private String jdbcPassword;

        @Override
        public void fun(){}
    }

第一次:是核心包没有引

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>${spring.version}</version>
</dependency>
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
  </dependency>

第二次:后来在另外一个工程里取不到值了,试了很多次,发现是在spring-mvc.xml中的如下代码中有错误,代码如下

    <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
    <context:component-scan base-package="com.xxx.xxx" />

正确代码如下,扫描controller包下的所有类时,controller包的地址没有写完整。

<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
<context:component-scan base-package="com.xxx.xxx.web.controller" />

【出错原因】是【无法识别占位符,就是在加载过程中直接把${jdbc_driver}当做字符串处理了】

整理一下错误流程:

我的工程里有一个spring-application.xml和spring-mvc.xml,前者先执行,spring-application.xml有如下代码:

  <bean id="decryptedPropertyPlaceholderConfigurer"
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="order" value="1"/>
       <property name="ignoreUnresolvablePlaceholders" value="true" />
       <property name="locations">
          <list>
             <value>classpath:*.properties</value>
             <value>classpath*:application.properties</value>
             <value>classpath*:globalconst.properties</value>
          </list>
       </property>
    </bean>

    <!-- 自动扫描 -->
    <context:component-scan base-package="com.xxx.xxx">
       <context:exclude-filter type="annotation"
          expression="org.springframework.stereotype.Controller" />
       <context:exclude-filter type="annotation"
          expression="org.springframework.web.bind.annotation.ControllerAdvice" />
    </context:component-scan>

里面配置了数据库配置文件application.properties,并且自动扫描工程包下的所有文件,包括controller层和service层(带value注解的方法是写在service层里),在这时候是能正确的解析@value注解并且取到properties的值的;后来执行spring-mvc.xml,由于扫描的路径填错成 base-package=”com.xxx.xxx” ,它又把service层的@value注解扫描了,由于这个文件没有配置数据库配置文件,导致取不到值,把@value注解中的占位符当作字符串处理。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值