我完全不熟悉Spring&在Java中不是很有经验。我正在尝试浏览spring.io网站上的Building REST services with Spring教程。我遇到了以下代码段,我对它实际上做了什么很困惑。
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Bean
CommandLineRunner init(AccountRepository accountRepository,
BookmarkRepository bookmarkRepository) {
return (evt) -> Arrays.asList(
"jhoeller,dsyer,pwebb,ogierke,rwinch,mfisher,mpollack,jlong".split(","))
.forEach(
a -> {
Account account = accountRepository.save(new Account(a,
"password"));
bookmarkRepository.save(new Bookmark(account,
"http://bookmark.com/1/" + a, "A description"));
bookmarkRepository.save(new Bookmark(account,
"http://bookmark.com/2/" + a, "A description"));
});
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我在Spring Boot文档中查找了CommandLineRunner,它说如果你想在应用程序启动时执行一些代码,它就会被实现。但据我所知,CommandLineRunner并未通过上述代码段中的任何内容实现。另外,我不知道init()方法的来源或实际情况。
此外,我从他们的github repo下载了完整的代码,但我不太确定如何实际运行它。我今天早些时候读到SpringApplication.run()
使得你不需要像Tomcat这样的外部服务部署任何东西。但是当我为Application类尝试java -jar ./jarFileName
时(因为它有main())似乎是一个自然的选择,它给出了一个错误。
任何帮助都将不胜感激。
答案 0 :(得分:3)
回答你的第一个问题:
CommandLineRunner由Lambda表达式实现:
return (evt) -> Arrays.asList(...
第二,init()
方法是一个Spring Bean定义,如@Bean
注释所示。
第三,运行你正确的应用程序的方式。 java -jar jarFile
应该运行它。我查看了git repo中的模块,并且一些模块缺少使jars可执行的spring-boot-maven-plugin
配置。但您可以从命令行运行它们,如下所示:mvn spring-boot:run