1.springboot的属性动态赋值
当程序中出现了频繁变化的数据时,当手动修改时需要重新编译打包,所以要为属性动态赋值。
1.1一般的赋值情况
@RestController
public class Controller{
private String host = "192.168.64.3";
private Integer port = 6380;
@RequestMapping("getMsg")
public String getMsg(){
return host+":"+port;
}
}
当项目编译后,若想要修改host和port变量的值,需要修改源文件.java,然后重新编译。这样造成程序的耦合度过高。
1.2 动态赋值
1.2.1 关于yml文件的说明
# yml文件语法
#1.key:(空格)value
#2.key与key之间有层级的缩进关系
server:
port: 8090
#属性赋值操作,编辑属性时注意前缀,只要springboot启动该数据就会被写入到内存中 key-value格式
redis:
host: 192.168.126.129
port: 4589
import org.springframework.beans.factory.annotation.Value;
@RestController
public class Controller{
@Value("${redis.host}") //springel表达式 简称spel表达式
private String host;
@Value("${redis.port}")
private Integer port;
@RequestMapping("getMsg")
public String getMsg(){
return host+":"+port;
}
}
@Value注解是spring框架下的。
1.2.2 与yml配置文件相对应的另一种配置文件properties
在yml文件中,配置信息中间以冒号分开,并且具有严格的层级缩进关系。properties配置文件中则不同。对比上面的yml文件。
server.port=8090
redis.host=192.168.126.129
redis.port=4589
可以看到不同层级用点号来表示,不是冒号。取值也用=号。
2.@ResponseBody注解
该注解加在类上面,表示类中的所有方法均被该注解修饰。单独加在某一个方法上只对该方法生效。
2.1作用1:将对象转化为JSON
1.当对象为List集合对象时,返回给前端的是json对象数组,
例如
@RequestMapping("getMsg")
@ResponseBody
public List<user> getMsg(){
List<user> list = .....;
return list;
}
2.当方法返回值是一个简单对象时,返回给前端的是一个json对象,形如:
3.当集合中的泛型不是莫一自定义类时,例如user类等,是包装类或者是String类时,返回的json数组。
4.总结:json有三种格式,http://json.cn/wiki.html,当方法的返回值不同时,@ResponseBody会将返回值转换为不同的json格式
2.2作用2:如果返回值是String类型,则向前端返回字符串本身。
例如
@RequestMapping("getMsg")
@ResponseBody
public String getMsg(){
return "hello";
}
2.3客户端发起ajax请求时
作用3:一般客户端发起ajax请求时,采用该注解返回数据,至于是返回json,还是String字符串,都是业务逻辑的要求。mvc中有一个重要的组件叫做视图解析器。视图解析器是为了动态的拼接页面的前缀和后缀。
如果加了@ResponseBody注解就不会执行视图解析器的操作。
3.使用properties配置文件给属性动态赋值。
@RestController
//动态的导入properties配置文件,交给spring容器进行加载。
@PropertySource("classpath:/。。。")
/**
/ 代表根目录,即resources目录,后面写配置文件所在的位置即可。
*/
public class Controller{
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private Integer port;
@RequestMapping("getMsg")
public String getMsg(){
return host+":"+port;
}
}
4. 总结yml和properties两种配置文件的不同
4. 1 书写格式:
yml:
1.yml之间以“:”分隔
2.key与value之间要有一个空格,在IDEA开发工具中,一定要检查是否有空格。正确的形式如下
这个时候颜色是橘黄色的,若中间无空格,则是错误的形式如下:
可以看见颜色变为白色。
3.yml中的key是有严格的层级的缩进关系的。由其要注意前面的缩进,一般是一个tab,但是有时候会不准,所以缩进的距离手动空格,将下一级放在上一级的第三个字母下就可以。
举一个简单的例子:
图中有三个key-value
分别是:
server.port=8095
server.servlet.context-path=/
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
这样可以清楚的理解层级结构
properties
通过图片一目了然。对比不同即可。
4.2 两种配置文件的使用
yml: 该配置文件中属性,可以直接使用。但是一般yml文件中存放的都是系统级别的数据,一般自定义的数据都放在properties配置文件中。
properties:该配置文件中的属性需要在类上加上特殊的注解,才可以使用配置文件中的属性。
yml文件不同加@PropertySource即可为属性动态赋值。
properties文件需要加@PropertySource注解才能为属性动态赋值。
5.环境的切换
业务说明:由于开发时都是链接公司自己的数据库/服务器等.把这个环境称之为"开发环境."
当开发完成之后需要进行上线部署,则需要链接"生产环境"
如果频繁的切换环境,则导致项目由于修改错误,导致问题的发生.
项目优化: 能否提供一种策略.简化上述操作的开发过程.
#第一份配置文件,用来指定默认的环境标识
spring:
profiles:
active: prod
---
#指定环境的名称
spring:
profiles: dev
server:
port: 8090
redis:
host: 192.168.126.129
port: 6379
# 1.需要将环境一分为二
---
spring:
profiles: prod
server:
port: 9000
redis:
host: 111.111.111.111
port: 7000
这是一份yml配置文件,通过图中的三个-将配置文件分为多份,图中切两刀,将一份配置文件分为了三份。第一刀将环境分为两份。
需要为每一份环境指定名称:如图使用spring.profiles来制定环境的名称。
环境有了名称后,还需要在最前面指定应该使用哪一份环境.
如图使用spring.profiles.active来指定使用哪一份环境。
6 lombok插件的使用
6.1 插件下载
在IDEA中File->Settings->Plugins->Marketplace中搜索lombok下载并重启Idea。
6.2 引入jar包
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
6.3 lombok注解的使用
@Accessors(chain = true) //链式加载
传统的对象中的属性赋值的方法比较啰嗦。
set方法是这样写的:
public void setId(Integer Id){
this.Id = Id;
}
返回值为void,
user.setId();
user.setName();
需要写多行代码。
使用@Accessors(chain = true) 注解后,会生成传统set方法的重载方法。如下:
public User SetId(Integer Id){
this.Id = Id;
return this;
}
该set方法返回当前对象。所以可以实现一行代码为多个属性同时赋值:
user.setId(2).setName(“zzz”);
6.4 lombok的问题
如果需要使用lombok工具就必须提前安装插件,如果在上线的时候LInux系统必须要提前安装lombok插件吗?
不需要安装。
原因:lombok在编译期有效,将.java文件编译为.class文件是,lombok会动态的添加get/set/toString等方法。添加到.class文件中
Linux上线部署时运行的.jar文件。而jar包中包含的文件都是.class文件。
指令是 java - jar 文件名.jar
编译好后,可以在target目录中看见编译好后的.class文件,如图:
可以看见@Data等相关注解都没有了。证明lombok注解只在编译期有效,生成相应的方法后,注解就没有了。
7 springboot整合mybatis
7.1导入jar包
<!--引入数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--springBoot数据库连接 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--spring整合mybatis 暂时 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>