您的位置:首页 > 编程语言 > Java开发

Idea 打包maven项目 以及spring boot 的自动配置

2017-07-18 00:00 435 查看
摘要: Idea 打包maven项目 以及spring boot 的自动配置

1.打包maven项目

1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+Alt+Shift+S)。



2.在弹出的窗口中左侧选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies"。



3.在配置窗口中配置"Main Class"。选择“Main Class”后配置“Directory for META-INF/MAINFEST.MF”,本文中选择的项目根目录,配置完成后如下图所示,点击OK进入下一步。



4.在弹出的窗体中选中"Build On make "(make 项目的时候会自动输出jar)



5.以上的步骤就完成了编译时生成Jar包的配置,然后在菜单中选择Build->make project



6.build success 后,去该项目的out文件夹内查找本项目的jar包

OK,jar打好,下面才是重头戏:

首先说下这个jar包的用处:自动获取当前项目的属性值(仅是测试,功能、业务性不强)



接下来,如何实现呢? 这里要了解spring boot条件注解这个概念,有如下注解形式:

                                      

@ConditionalOnBean当容器里有指定的Bean的条件下
@ConditionalOnClass  当类路径下有指定的class的条件下
@ConditionalOnExpression基于SpEL表达式作为判断条件
@ConditionalOnJava基于jvm版本作为判断条件
@ConditionalOnJndi在JNDI存在的条件下查找指定的位置
@ConditionalOnMissingBean当容器里没有指定Bean的情况下
@ConditionalOnMissingClass当类路径下没有指定的类的情况下
@ConditionalOnNotWebApplication当前项目不是web项目的情况下  
@ConditionalOnProperty指定的属性是否有指定的值
@ConditionalOnResource类路径下是否有指定的资源
@ConditionalOnSingleCandidate当指定的Bean在容器中只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalOnWebApplication当前项目是web项目的条件下
接下来,用标红的注解,做个实例吧

首先是jar源的情况:基于spring boot框架,实现类型安全读取属性值的功能,比较简单,主要是整个流程能否顺利走通,最终看到想要的效果,这就要

智者见智仁者见仁了,不废话,燥起来。



基本的组织结构,拣重点 点一下

HelloServiceAutoConfiguration


1 package com.wm.auto;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
6 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
7 import org.springframework.boot.context.properties.EnableConfigurationProperties;
8 import org.springframework.context.annotation.Bean;
9 import org.springframework.context.annotation.Configuration;
10
11
12 @Configuration
13 @EnableConfigurationProperties(HelloServiceProperties.class)
14 @ConditionalOnClass(HelloService.class)
15 @ConditionalOnProperty(prefix = "hello",value ="enabled",matchIfMissing = true)
16 public class HelloServiceAutoConfiguration {
17     @Autowired
18     private HelloServiceProperties helloServiceProperties;
19
20     @Bean
21     @ConditionalOnMissingBean(HelloService.class)
22     public HelloService helloService(){
23         HelloService helloService=new HelloService();
24         helloService.setMsg(helloServiceProperties.getMsg());
25         return helloService;
26     }
27 }


此处上面的判断条件,判断HelloService Bean是否存在,若不存在,就创建一个。

对了,还有如何做到类型安全读取配置文件的属性值的

HelloServiceProperties


1 package com.wm.auto;
2
3 import org.springframework.boot.context.properties.ConfigurationProperties;
4
5
6 @ConfigurationProperties(prefix="hello")
7 public class HelloServiceProperties {
8     private  static final String MSG="world";
9     private  String msg=MSG;
10
11     public String getMsg() {
12         return msg;
13     }
14
15     public void setMsg(String msg) {
16         this.msg = msg;
17     }
18
19 }


spring.factories 这个是个重点,是告诉引用此jar包的项目,声明了有哪些自动配置,若有多个配置,需用“,”隔开,此处的“\”是为了换行后仍然能读到属性。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.wm.auto.HelloServiceAutoConfiguration

接下来就可以打包了,这个过程中,遇到了个问题:使用mvn install 打包到maven的本地仓库后,引用该jar的项目是由gradle构建的,用了若干方法始终无法被正常使用,

若某位大神 遇到过,并解决了,清指出问题的原因,不胜感激。

最后就是引用jar包的项目介绍:



1 package com.boot;
2
3 import com.boot.properties.AuthorSetting;
4 import com.wm.auto.HelloService;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.boot.SpringApplication;
7 import org.springframework.boot.autoconfigure.SpringBootApplication;
8 import org.springframework.web.bind.annotation.RequestMapping;
9 import org.springframework.web.bind.annotation.RestController;
10
11 @RestController
12 @SpringBootApplication
13 public class Application {
14
15     @Autowired
16     public AuthorSetting authorSetting;
17
18     @Autowired
19     public HelloService helloService;
20
21     @RequestMapping("/")
22     public String index() {
23         return authorSetting.getName() + authorSetting.getAge() + "Hello Spring Boot";
24     }
25
26     @RequestMapping("/auto-info")
27     public String autoString() {
28         return helloService.getMsg();
29     }
30
31     public static void main(String[] args) {
32         SpringApplication.run(Application.class, args);
33     }
34 }


至此 完成,看效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐