我的应用程序需要一个从服务器上的JAR文件调用的静态main方法。如果main是静态的,它调用的方法以及字段必须是静态的。问题是,我的jdbcTemplate是自动装配的,静态时为空(我明白这不起作用)。要么我从main中删除'static'而我不能从JAR中调用它,或者我在类中的所有内容都是'static'而jdbcTemplate是null。这个问题的最佳解决方案是什么。
提前致谢。
*请注意,main在此示例中不是静态的,当我在服务器上运行它时,'main'必须是静态的。请记住任何解决方案。
public class Purge {
@Autowired
protected JdbcTemplate jdbcTemplate;
private int PURGE_DAYS = 14;
/**
* @param args
*/
public void main(String[] args) {
loadContext();
purge();
}
ApplicationContext loadContext() {
return new ClassPathXmlApplicationContext("applicationContext-purge.xml");
}
public void purge() {
jdbcTemplate.execute("blah blah blah");
}
}
答案 0 :(得分:0)
您的main
方法不是static
。如果是,则无法调用非静态purge()
。您的代码中缺少某些内容。你有没有机会打电话给new Purge()
?如果是这样,Spring并不知道该实例,也不会自动装配任何东西。
加载上下文后,您必须从该上下文中获取Purge
的实例:
Purge purge = loadContext().getBean(Purge.class)
答案 1 :(得分:0)
如果您需要从main方法访问bean,可以尝试使用ClassPathXmlApplicationContext#getBean
:
ApplicationContext context = loadContext();
this.jdbcTemplate = (JdbcTemplate) context.getBean("myJdbcBeanName");
答案 2 :(得分:0)
你别无选择,只能主静,下面是优雅的方法做它“春天”的方式。
@Component
public class Purge{
@Autowired
protected JdbcTemplate jdbcTemplate;
public void purge(){
jdbcTemplate.execute("blah blah blah");
}
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("somthing.xml");
Purge p = context.getBean(Purge.class);
p.purge();
}
}
答案 3 :(得分:0)
感谢您的帮助。我发现获取jdbcTemplate bean更容易,这是我的解决方案。
public class Purge {
private static int PURGE_DAYS = 14;
/**
* @param args
*/
public static void main(String[] args) {
purge((JdbcTemplate) loadContext().getBean("jdbcTemplate"));
}
static ApplicationContext loadContext() {
return new ClassPathXmlApplicationContext("applicationContext-purge.xml");
}
public static void purge(JdbcTemplate jdbcTemplate) {
jdbcTemplate.execute("blah blah blah");
}
}