作用:parent当中有一个大型的配置文件,在其中管理了springBoot与第三方整合的
所有(主流的)的jar包的版本,来解决jar包版本的冲突问题.几乎实现了零整合.(定义的作用)
误区:springBoot中的parent不能直接依赖jar包文件.需要通过自己的依赖项,导入需要的jar包.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
说明: 在parent标签的基础之上.导入了dependencie之后会根据parent中指定的版本添加jar包文件.并且会自动的导入相关的依赖jar包.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--build maven在工作时需要执行的操作. -->
<build>
<!--插件操作 -->
<plugins>
<!--springBoot中负责项目打包/部署/发布等maven操作 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
说明:通过maven工具中的maven-install指令,可以将maven项目打包.在target目录中会生成相对应的jar包文件.
打包显示信息:![图片](https://uploader.shimo.im/f/XfEvUw7WgtUMCIAg.png!thumbnail)
打包成功之后效果:
运行jar包项目:
1.进入dos命令窗口
2.执行命令:
java -jar xxxxxx.jar
![图片](https://uploader.shimo.im/f/HvE6mJxr5D8MKsSG.png!thumbnail)
3.用户访问测试
1.将项目clean
重新编译,生成.class文件
2.将项目打包
![图片](https://uploader.shimo.im/f/1Kb8jLM0FJ4BoqU6.png!thumbnail)
问题:
为什么SpringBoot项目启动之后,可以自动的运行tomcat服务器?
SpringBoot启动时,如何加载springMVC的配置的,在哪里配置?
说明:在SpringBoot程序中,如果需要添加某些功能,则只需要添加jar包文件即可,无需经过复杂的配置.直接可以使用.
1.添加jar包文件
org.springframework.boot
spring-boot-starter-web
2.查看主启动类
当程序启动时,会执行主启动类的方法.
@SpringBootApplication
public class SpringbootDemo1Application { //标识
//main方法 是java程序的唯一入口.
public static void main(String[] args) {
//1.当程序启动时,通过maven方法执行主启动的类加载.
SpringApplication.run(SpringbootDemo1Application.class, args);
}
}
3.主启动类注解的说明
元注解:修饰注解的注解.
@Target(ElementType.TYPE) //元注解 标识注解的作用对象 类
@Retention(RetentionPolicy.RUNTIME) //标识注解的生命周期 运行期有效
@Documented //相关文档的说明
@Inherited //该注解可以被继承.
@SpringBootConfiguration springBoot就是一个配置类,可以扫描项目中所有的其他的配置类文件. 配置类扫描
@EnableAutoConfiguration //开启自动的配置项
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
//springBoot启动时,会剔除某些filter之后启动运行.
public @interface SpringBootApplication {...}
4.自动配置注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //自动配置的包扫描路径
@Import(AutoConfigurationImportSelector.class)//自动配置的选择器
根据jar包实例化对象. 自动完成加载.
public @interface EnableAutoConfiguration {....}
以后写代码,包路径至少应该在主启动的同包及子包中.
AutoConfigurationImportSelector.class,该类在SpringBoot程序启动时,会自动的加载POM.xml文件中SpringBoot自动配置的jar包文件.并且运行.
如果将类中的属性直接赋值,则后台修改维护时不方便.
最好的方式应该通过配置文件的方法动态赋值.
@RestController //标识返回值是JSON字符串
public class JDBCController {
private String jdbcName = "mysql";
private String jdbcUrl = "127.0.0.1:3306";
}
1.修改字符集编码
2.编辑pro文件
#字符集编码问题, UTF-8编码只对当前文件有效的. 文件可以写中文
#但是springBoot程序在读取pro文件时,默认采用的字符集编码格式为ISO-8859-1.如果该配置文件编辑中文则
#数据读取时必然乱码!!! 所以写配置文件时,不要有中文.
#语法: 1.数据结构 K-V结构 2.pro文件本身就是字符串所以无需添加""号 3.编辑时最好不要加多余的空格
server.port=8090
server.servlet.context-path=/ #默认的发布路径
#语法说明
#1.数据结构 k-v结构 k:(空格)v
#2.有层级关系 相同的层级可以缩进
#3.YML配置文件本身是utf-8格式,并且程序读取时也是utf-8编码 不会乱码
server:
port: 8090
servlet:
context-path: /jt
1).编辑YML配置文件
#语法说明
#1.数据结构 k-v结构 k:(空格)v
#2.有层级关系 相同的层级可以缩进
#3.YML配置文件本身是utf-8格式,并且程序读取时也是utf-8编码 不会乱码
server:
port: 8090
servlet:
context-path: /
#为属性赋值
jdbc:
jdbcName: mysql数据库
jdbcUrl: 127.0.0.1:3306
2).编辑JDBCController
@RestController //标识返回值是JSON字符串
public class JDBCController {
/**
* 1.利用@Value注解 为属性赋值 spel表达式
* 原理:
* 1.Spring程序启动时,会加载YML配置文件,解析配置文件中的k-v格式,之后
* 保存到Spring所维护的map集合中.
* 2.当Spring程序解析RestController时,会实例化当前对象,需要为其中的数据利用
* @value注解完成赋值操作.
* 3.spring程序根据spel表达式的语法在map集合中根据key查找数据,
* 如果查询没有问题,则可以直接赋值.
* 如果查询不到数据,则spring容器启动报错
*/
@Value("${jdbc.jdbcName}")
private String jdbcName; // = "mysql";
@Value("${jdbc.jdbcUrl}")
private String jdbcUrl; // = "127.0.0.1:3306";
@RequestMapping("/getJDBC")
public String getMsg() {
return jdbcName + ":" + jdbcUrl;
}
}
3).测试效果
![图片](https://uploader.shimo.im/f/wwk9YmfcNdktvDNR.png!thumbnail)
1.3.5.1添加jar包文件
org.springframework.boot
spring-boot-configuration-processor
true
1.3.5.2添加注解
@RestController //标识返回值是JSON字符串
@ConfigurationProperties(prefix="jdbc2") //程序自动的扫描前缀为jdbc2的属性
public class JDBCController2 {
/**
* 批量为属性赋值
* jdbcName: mysql数据库
jdbcUrl: 127.0.0.1:3306
要求:
1.YML配置文件中属性的名称应该与类中属性的名称一致.
2.需要配合SET方法完成赋值操作.
*/
private String jdbcName; // = "mysql";
private String jdbcUrl; // = "127.0.0.1:3306";
@RequestMapping("/getJDBC2")
public String getMsg() {
return jdbcName + ":" + jdbcUrl;
}
public String getJdbcName() {
return jdbcName;
}
public void setJdbcName(String jdbcName) {
this.jdbcName = jdbcName;
}
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
}
jdbc3.jdbcName=mysqlPro
jdbc3.jdbcUrl=127.0.0.1:3306
添加注解,加载指定的配置文件
@RestController //标识返回值是JSON字符串
@PropertySource("classpath:/properties/jdbc.properties")
//加载指定的配置文件,之后交给Spring容器统一管理
public class JDBCController3 {
/**
* 赋值操作 2中 1.@value方式赋值 2.批量赋值
*指定配置文件
*/
@Value("${jdbc3.jdbcName}")
private String jdbcName;
@Value("${jdbc3.jdbcUrl}")
private String jdbcUrl;
@RequestMapping("/getJDBC3")
public String getMsg() {
return jdbcName + ":" + jdbcUrl;
}
}
开发环境和生产环境IP地址和端口号可能都不相同.如果每次都要频繁的修改配置文件,导出开发特别繁琐.
要求:
1.配置项的个数必须相同的.
2.使用"---"实现环境分割
3.为每一个环境,设定名称
spring:
profiles: dev #设定开发环境
4.设定默认环境名称
#指定默认的环境配置
spring:
profiles:
active: dev
---
#语法说明
#1.数据结构 k-v结构 k:(空格)v
#2.有层级关系 相同的层级可以缩进
#3.YML配置文件本身是utf-8格式,并且程序读取时也是utf-8编码 不会乱码
spring:
profiles: prod #我是生产环境
server:
port: 8090
servlet:
context-path: / #项目的发布路径
#为属性赋值
jdbc:
jdbcName: "@value方式赋值"
jdbcUrl: 127.0.0.1:3306
jdbc2:
jdbcName: 批量赋值
jdbcUrl: 127.0.0.1:3306
--- #分割线
spring:
profiles: dev #设定开发环境
server:
port: 8095
servlet:
context-path: /jt
#为属性赋值
jdbc:
jdbcName: 我是开发环境!!!
jdbcUrl: 127.0.0.1:3306
jdbc2:
jdbcName: 批量赋值
jdbcUrl: 127.0.0.1:3306
说明:添加热部署的jar包文件
<!--支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
org.projectlombok
lombok
说明:如果当前STS根目录中 如果已经包含了lombok.jar包文件,则表示安装成功!!!
@Data //生成get/set/toString/equals
@Accessors(chain=true) //表示链式加载 重写set方法,将对象返回
@NoArgsConstructor //添加无参构造 为以后框架的使用做准备
@AllArgsConstructor //全部参数的构造方法.
public class User {
private Integer id;
private String name;
private Integer age;
private String sex;
/**
* 重写set方法,实现对象的连续调用
*/
/*public User setId(Integer id) {
this.id = id;
return this;
}
public User setName(String name) {
this.name = name;
return this;
}*/
}
问题:lombok在本地使用时,需要完成安装,如果项目xxx.jar在服务器Linux系统中运行时,问:是否需要重新安装lombok插件???
答: 不需要!!!
说明: .jar包文件中包含不是.java文件信息,而是.class文件,程序将.java文件编译为.class文件时,会调用lombok插件.动态的添加指定的get/set/toString等方法.
所以,程序在Linux系统中运行时,不需要再次安装.
总结:lombok插件在程序编译期有效.