无法从异步方法获取应用程序属性

时间:2018-02-14 21:49:03

标签: java spring spring-mvc spring-boot autowired

@Service
public Class SomeService {

    private SomeServiceAsync someServiceAsync = new SomeServiceAsync();

    ...

    public String DoAThing() {
        CompletableFurute<String> future = someServiceAsync.GetAString();
        return future.get();
    }
}

@Service
@EnableAsync
public Class SomeServiceAsync {

    @Value("${someProp1}")
    private String someProp1;

    @Autowired
    private Environment env;

    ...

    @Async
    public CompletableFuture<String> GetAString() {
        System.out.println(someProp1); // returns null
        String someProp2 env.getProperty("someProp2"); // throws null pointer exception

        return CompletableFurute.completedFuture("blablabla");
    }
}

我的问题只是在我的一些方法异步运行后无法访问我的应用程序属性。在我尝试执行该方法并从@Value获取null或env为null之前没有任何失败。

该方法在异步之前有效,当我不访问应用程序属性时,异步版本工作正常。

1 个答案:

答案 0 :(得分:1)

问题似乎是new SomeServiceAsync(),而不是@Autowired

多次犯了同样的错误。