我有一个Spring Boot应用程序,它使用Spring Integration存储过程入站通道适配器。我想将命令行参数传递给存储过程。 Spring Boot文档说SpringApplication会将任何以' - '开头的命令行选项参数转换为属性并将其添加到Spring Environment。在int-jdbc:parameter元素中访问此属性的正确方法是什么?
Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext ctx = new SpringApplication("integration.xml").run(args);
System.out.println("Hit Enter to terminate");
System.in.read();
ctx.close();
}
}
integration.xml
<int-jdbc:stored-proc-inbound-channel-adapter
stored-procedure-name="sp_get_some_records"
data-source="dataSource"
channel="recs.in.channel"
id="recs.in">
<int:poller fixed-rate="86400" time-unit="SECONDS" />
<int-jdbc:parameter name="myarg" type="java.lang.Integer" value="${arg1}" />
</int-jdbc:stored-proc-inbound-channel-adapter>
在这里使用${arg1}
似乎无法解决。什么是正确的语法,还是需要定义其他属性或属性占位符?
启动应用,例如使用java -jar app.jar --arg1=5
抛出
Error converting typed String value for bean property 'value'; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type [java.lang.String] to required type [java.lang.Integer]; nested exception is java.lang.NumberFormatException: For input string: "${arg1}"
我首先想到的是它与类型转换有关并尝试使用
<int-jdbc:parameter name="myarg" type="java.lang.Integer" value="#{ T(java.lang.Integer).parseInt(arg1) }" />
但这也不起作用。
答案 0 :(得分:2)
你没有任何Spring Boot的东西。
我的意思是auto-configuration
,其中也包括PropertyPlaceholderConfigurer
。
那一定是这样的:
@SpringBootApplication
@ImportResource("integration.xml")
public class Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
System.out.println("Hit Enter to terminate");
System.in.read();
ctx.close();
}
}
我刚刚查看了barrier
示例:https://github.com/spring-projects/spring-integration-samples/tree/master/basic/barrier
答案 1 :(得分:1)
如果我是你,我会将你的XML配置转换为JavaConfig。然后,您可以使用
访问配置类中的属性@Value("${arg1}")
private Integer arg1;