【发布时间】:2018-09-23 19:03:19
【问题描述】:
@Value("${db.schema.name}")
private String dbSchemaName;
private final String QUERY =
"SELECT * " +
"FROM " + dbSchemaName + ".product " +
"WHERE id = :id";
我将静态字符串“查询”用于多种方法。变量 dbSchemaName 在 application.properties (db.schema.name) 中定义。
public List<Object> loadData(final String id){
final MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("id", id);
return jdbcTemplate.query(QUERY, parameters, new RowMapperResultSetExtractor<>(mapper)));
}
如果我执行方法 loadData(...),dbSchemaName 将不会被解析。
如果我将 Query 从 String 变量更改为方法,则 dbSchemaName 将被正确解析。
private final getQuery(){
"SELECT * " +
"FROM " + dbSchemaName + ".product " +
"WHERE id = :id";
}
但我想在查询字符串中获取 dbSchemaName 的访问权限。对我来说,private final String QUERY 中的 dbSchemaName 始终为空。或者有没有比让它成为一种方法更好的设计?
【问题讨论】:
-
使用setter注入代替字段注入来注入静态字段
-
我已经编辑了我的帖子。
-
我更新了我的帖子。我不想让它静态,我想在查询字符串中获取 dbSchemaName 的访问权限。 dbSchemaName 始终为空
-
您可以使用注释
@PostConstruct...访问任何方法中的值
标签: java sql spring spring-boot