使用@PropertySource将. Properties文件中的所有值注入Properties(或Map)中.<



我在一个使用Spring JDBC与数据库接口的应用程序中使用Spring Framework版本5.3.10

我试图将SQL查询隔离到.properties文件。我知道有很多方法可以做到这一点,但我想知道是否有一种方法可以注入所有的值,对于@PropertySource("classpath:database/queries.properties")引用的给定.properties文件到Properties(或Map)类型。

例如,如果我有一个"存储库"。(或DAO,由您命名)类,如下所示:

@Repository
@RequiredArgsConstructor
@PropertySource("classpath:database/queries.properties")
public class ThisJdbc implements IThisJdbc {
private final Map<String, String> sqlStore; // ...values from queries.properties here
private final Properties sqlStore; // ...or here
@Override
public int[] batchInsert(final List<This> these) {
sqlStore.get("batch-insert");
...
}
...
}

我想要一种简单的方法来注入通过上述类型提供给该类的.properties文件中的内容-或任何其他可用的键/值类型。.properties文件和往常一样:

find-all = select * from tb_this
find-by-col_1 = select * from tb_this where col_1 = :col_1
insert-record = insert into tb_this values (:col_1, :col_2, :col_3)

请注意,在所有这些类中注入Environment对我来说不是一个选项;)

我正在寻找一种方法来使用@Value与固定的前缀-类似于Spring Boot的@ConfigurationProperties,但我找不到任何东西。

基本上,我想看看是否有一种方法使用@PropertySource和任何Map类似的类型来避免有这个:

@Bean(name = "this-queries")
public PropertiesFactoryBean thisQueries() {
final var bean = new PropertiesFactoryBean();
bean.setLocation(new ClassPathResource("database/queries.properties"));
return bean;
}

@PropertySource将与@Configuration类一起使用。话虽如此,请尝试以下操作:

@Repository
@Configuration
@RequiredArgsConstructor
@PropertySource("classpath:database/queries.properties")
public class ThisJdbc implements IThisJdbc {
@Value("#{${queries}}")
private final Map<String, String> sqlStore; // ...values from queries.properties here
@Override
public int[] batchInsert(final List<This> these) {
sqlStore.get("batch-insert");
...
}
...
}

假设你的queries.properties是:

queries = {key1:'query1',key2:'query2',....}

相关内容

  • 没有找到相关文章