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

来源:互联网 发布:linux下安装jira 编辑:程序博客网 时间:2024/05/22 03:39

用@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 0