1

我的应用程序需要一个从服务器上的 JAR 文件调用的静态 main 方法。如果 main 是静态的,则它调用的方法以及字段必须是静态的。问题是,我的 jdbcTemplate 是自动装配的,并且在静态时为空(我知道这不起作用)。要么我从我的主目录中删除“静态”并且我不能从 JAR 中调用它,或者我将所有内容都放在“静态”类中并且 jdbcTemplate 为空。这个问题的最佳解决方案是什么。

提前致谢。

*请注意,此示例中的 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");
}

}
4

4 回答 4

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");
}

}

于 2013-02-15T16:06:38.267 回答
0

你别无选择,只能使用 main static,下面是优雅的方法,它是“Spring”的方式。

   @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();
        }


    }
于 2013-02-14T21:27:40.873 回答
0
  1. 你的main方法不是static。如果是这样,就不可能调用 non-static purge()。您的代码中缺少某些内容。你不是new Purge()有机会打电话吗?如果是这样,Spring 不知道该实例并且不会自动装配任何东西。

  2. 加载上下文后,您必须Purge从该上下文中获取一个实例:

    Purge purge = loadContext().getBean(Purge.class)
    
于 2013-02-14T20:35:37.683 回答
0

如果您需要从 main 方法访问 bean,您可以尝试使用ClassPathXmlApplicationContext#getBean

ApplicationContext context = loadContext();

this.jdbcTemplate = (JdbcTemplate) context.getBean("myJdbcBeanName");
于 2013-02-14T20:36:41.137 回答