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条件注解这个概念,有如下注解形式:
接下来,用标红的注解,做个实例吧
首先是jar源的情况:基于spring boot框架,实现类型安全读取属性值的功能,比较简单,主要是整个流程能否顺利走通,最终看到想要的效果,这就要
智者见智仁者见仁了,不废话,燥起来。
基本的组织结构,拣重点 点一下
此处上面的判断条件,判断HelloService Bean是否存在,若不存在,就创建一个。
对了,还有如何做到类型安全读取配置文件的属性值的
spring.factories 这个是个重点,是告诉引用此jar包的项目,声明了有哪些自动配置,若有多个配置,需用“,”隔开,此处的“\”是为了换行后仍然能读到属性。
接下来就可以打包了,这个过程中,遇到了个问题:使用mvn install 打包到maven的本地仓库后,引用该jar的项目是由gradle构建的,用了若干方法始终无法被正常使用,
若某位大神 遇到过,并解决了,清指出问题的原因,不胜感激。
最后就是引用jar包的项目介绍:
至此 完成,看效果
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 }
至此 完成,看效果
相关文章推荐
- Idea 打包maven项目 以及spring boot 的自动配置
- Intellij IDEA springboot maven 配置mybatis-generator,自动从数据库中生成代码
- Spring boot 项目 maven的profile多环境配置 不自动替换变量的问题解决
- 初识Springboot 以及IDEA maven打包记录
- IDEA的springboot项目maven打包的时候过滤掉单元测试
- IDEA 配置maven + SpringBoot项目在新电脑上的配置运行
- maven的Springboot项目的携程Apollo配置中心的配置以及使用
- Spring boot项目maven的profile多环境配置不自动替换变量的问题解决
- Maven配置Spring Boot项目打包,依赖包到lib目录、配置文件到conf目录
- Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件
- 搭建Nexus Repository 3.6.0-02和配置apache-maven-3.5.2和本地的local Repository以及项目的pom.xml(IDEA 打包等)
- 解决 在IDEA中使用Maven和Scala新建项目没有自动产生src 以及spark的编译运行配置
- intellij idea + bitbucket + maven + spring-boot配置记录
- idea中将多个spring boot项目放在一个maven项目中
- drools 整合SpringBoot在IDEA上的设置以及gradle配置
- Spring Boot核心原理-自动配置 以及@ConfigurationProperties 注解
- spring boot properties类型安全以及自动配置
- 将项目打包成war(基于maven springboot)
- Spring Boot 自动配置理解 以及实现自定义Starter
- Maven安装与配置SpringToolSuite创建项目时的配置以及pomXml和spring_beansXml以及日志文件