【问题标题】:How to resolve spring boot @Value and store it in another string?如何解析spring boot @Value并将其存储在另一个字符串中?
【发布时间】: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


【解决方案1】:

在您的非工作代码示例中,java 在 Spring 将 ${db.schema.name} 的值注入 dbSchemaName 之前构造了 QUERY 字符串,因此它是 null

要么坚持你的方法示例,要么从属性中注入整个查询:

@Value("${db.query.value}")
private String query;

db.query.value 在哪里:

SELECT * FROM ${db.schema.name}.product WHERE id = :id

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2012-10-17
    • 2018-01-01
    • 2017-10-18
    相关资源
    最近更新 更多