排查了两天了,哪里的毛病也没找到,名称没写错,写测试类也能读取到属性文件的值,就是在datasource中使用,被识别为字符串。
问题解决了,如下图 mapperscannerconfigure的事儿 。
这样写对啊,你properties里面是写的jdbc.username=值 吗?,你把properties里面的东西粘出来我看看
兄弟,${}是 el表达式,这里应该用 spring表达式吧,,,应该 是 #{jdbc,username}
注入Spring表达式值
Spring表达式: 读取Bean的属性
将一个Bean的属性读取出来,注入到另一个Bean对象的属性中。可以利用Spring表达式来实现。
Spring表达式的语法类似于 EL表达式(一样)。
${user.name} EL表达式
#{user.name} Spring 表达式
el表达式是什么?
是一套简单的计算规则,用于给jsp标签的属性赋值,也可以脱离jsp标签直接使用(用来输出)。
el表达式的使用
1)访问bean的属性 e1.jsp
方式一 :
${user.name} 容器依次从pageContext,request,session,application中查找绑定名称为
"user"的对象,找到之后,会调用该对象的"getName"方法,然后输出。
注: a,如果找不到该对象,会输出""(空字符串)。
b,对于null值,会输出""(空字符串)。
c,可以指定查找范围
pageScope,requestScope,sessionScope,applicationScope
方式二: (e1.jsp)
${user["name"]}等价于${user.name}
注:
a,[]里面可以出现绑定名,允许出现变量
b,[]里面可以出现从0开始的下标,用来访问数组中的某个元素。
在spring中是没有解析属性占位符的能力,Spring推荐PropertySourcesPlaceholderConfigurer,使用他就意味着允许spring解析对应的属性文件,并通过占位符去引用相应的位置;下面是例子,给你个思维,供你参考。
首先装配Spring推荐的PropertySourcesPlaceholderConfigurer,引入你的配置文件:
@PropertySource(value={"classpath:database-config.properties"}, ignoreResourceNotFound=true)
public class ApplicationConfig {
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
有了上面的Bean,就能让spring解析属性占位符,那么还需要知道如何去引用已经定义好的配置,这里可以使用@Value
和占位符:
@Component
public class DataSourceBean {
@Value("${jdbc.database.driver}")
private String driver = null;
@Value("${jdbc.database.url}")
private String url = null;
@Value("${jdbc.database.username}")
private String username = null;
@Value("${jdbc.database.password}")
private String password = null;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Bean(name = "dataSource1")
public DataSource getDataSource() {
Properties props = new Properties();
props.setProperty("driver", driver);
props.setProperty("url", url);
props.setProperty("username", username);
props.setProperty("password", password);
DataSource dataSource = null;
try {
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
}
return dataSource;
}
}
希望采纳,谢谢。
楼上分析的差不多,一个是你properties文件可能写法有问题,二是你在spring中读取时候,最好为util:properties的设置id属性,然后在dataSource中引用
第一个,properties文件,注意:不能有空格、不能包含双引号。
##jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mytest
username=root
password=root123
第二个,在bean的dataSource中要使用spring表达式引用,格式为#{文件标识.属性名},如#{jdbc.driver}
<!-- 数据库配置文件 -->
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{jdbc.driver}" />
<property name="url" value="#{jdbc.url}" />
<property name="username" value="#{jdbc.username}" />
<property name="password" value="#{jdbc.password}" />
</bean>
jdbc.url=jdbc:mysql://127.0.0.1:3306/shixun?useUnicode=true&characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root 这个是我的properties,
这个是我的数据源,太多了超过500字不能回复
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
这个是我的数据源
,用spring框架的PropertyPlaceholderConfigurer类读取配置文件,默认使用${开头}结尾读取