作为参数值从 application.properties 在 class 级别 Spring 批量传递

Pass as parameter value from application.properties at class level Spring Batch

我有这部分代码:

@Component
public class TestWriter implements ItemWriter<Test> {
    //  @Value("${test.param:3}")
    //  private int testParam;

    private final ForkJoinPool customThreadPool = new ForkJoinPool(3);

但是在 new ForkJoinPool(int parallelism) 中,我想将我的参数作为参数传递给 application.properties (testParam)

private final ForkJoinPool customThreadPool = new ForkJoinPool(testParam);

我尝试将 Enviroment 与我的参数一起使用,但它不起作用。

@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

如果可能并正确,如何完成,正确的方法是什么?

谢谢

有两种方法可以实现这一点。一种是通过环境变量,另一种是通过 属性 文件。

  1. 通过环境变量-

您需要将环境变量设置为JDBC_URL=jdbc:postg...

并按如下方式使用它。

@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("JDBC_URL"));
  1. 通过属性文件,

    @Value("${jdbc.url}") 私有字符串 JDBC_URL;

在你的application.properties中添加

jdbc.url=jdbc:postg...

确保使用构造函数注入,属性在需要时可用。

@Component
public class TestWriter implements ItemWriter<Test> {

     private final ForkJoinPool customThreadPool;

     @Autowired
     public TestWriter (@Value("${test.param:3}") int testParam) {
      this.customThreadPool = new ForkJoinPool(testParam);
    }