SpringBoot 知识小总
前言
这篇文章是我初学SpringBoot时开始记录的一篇博客。原本学习时是持续更新的,后来慢慢学习的过程中断更了 ……,在这里也贴出来了。说不定还是可以帮到别人的
application.properties
Springboot,classpath路径下的application.properties形式的配置文件中不可以写yaml格式的配置代码。如果写上不会报错,但是无效。application.yaml形式的配置文件中也不能写properties格式的配置代码。如果写上在springboot项目启动的时候会报错。
application.properties和application.yml文件可以放在一下四个位置:
- 外置,在相对于应用程序运行目录的/congfig子目录里。
- 外置,在应用程序运行的目录里
- 内置,在config包内
- 内置,在Classpath根目录
同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:
此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。
Profile 多环境配置
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties
的格式,其中{profile}
对应你的环境标识,比如:
- application-dev.properties:开发环境 # info
- application-prod.properties:生产环境 # warn
想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。
Pom.xml
如果pom.xml文件中已经继承了 spring-boot-starter-parent,而 spring-boot-starter-parent 又提供了 dependency-management 。那么我们可以忽略被选中依赖的版本(version元素)。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
@Bean的作用
@Configuration
public class JedisClusterConfig {
@Autowired
private RedisProperties redisProperties;
@Bean
public JedisCluster getJedisCluster() {
String[] serverArray = redisProperties.getClusterNodes().split(",");//获取服务器数组(这里要相信自己的输入,所以没有考虑空指针问题)
Set<HostAndPort> nodes = new HashSet<>();
for (String ipPort : serverArray) {
String[] ipPortPair = ipPort.split(":");
nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
}
return new JedisCluster(nodes, redisProperties.getCommandTimeout());
}
}
注意:
- 在方法上使用@Bean注解可以让方法的返回值为单例
- 该方法的返回值可以直接注入到其他类中去使用
- @Bean注解是方法级别的
- 如果使用的是常用的spring注解@Component,在方法上没有注解的话,方法的返回值就会是一个多例
- 该方法的返回值不可以直接注入到其他类去使用
- 该方式的注解是类级别的
Mybatis
<!-- 指定工作空间,要与接口名相同,源代码没有去看,猜测应该是通过"这里的namespace.下边方法的id"来定位方法的 -->
<mapper namespace="com.xxx.firstboot.mapper.UserMapper">
<!-- 若不需要自动返回主键,将useGeneratedKeys="true" keyProperty="id"去掉即可(当然如果不需要自动返回主键,直接用注解即可) -->
<insert id="insertUserWithBackId" parameterType="User" useGeneratedKeys="true" keyProperty="id" >
<!-- useGeneratedKeys代表使用数据库自动自增的主键值填充到 作为参数插入的user对象的keyProperty属性id上 -->
<![CDATA[
INSERT INTO tb_user
(
username,
password
)
VALUES
(
#{username, jdbcType=VARCHAR},
#{password, jdbcType=VARCHAR}
)
]]>
</insert>
</mapper>
Swagger
- @Api:用在类上,说明该类的作用
- @ApiOperation:用在方法上,说明方法的作用
- @ApiImplicitParams:用在方法上包含一组参数说明
- @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
- paramType:参数放在哪个地方
- header-->请求参数的获取:@RequestHeader
- query-->请求参数的获取:@RequestParam
- path(用于restful接口)-->请求参数的获取:@PathVariable
- body(不常用)
- form(不常用)
- name:参数名
- dataType:参数类型
- required:参数是否必须传
- value:参数的意思
- defaultValue:参数的默认值
- @ApiResponses:用于表示一组响应
- @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
- code:数字,例如400
- message:信息,例如"请求参数没填好"
- response:抛出异常的类
- @ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)
- @ApiModelProperty:描述一个model的属性
maven package
maven项目借助于
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打包之后生成的项目的jar包在项目根目录下生成的target目录下。
其中项目中所有配置文件及依赖的jar包(均在自动生成的lib目录下)项目的类文件编译生成的class文件。
Starts
可以创建自己的Starter,但名字格式不能是 spring-boot-starter-&,而是 &-spring-boot-starter。类似Maven插件的规则。
cmd运行fat jar
远程调试
运行fat jar(executable jar)
+ java -jar target/xxxx.jar 注意,是在项目路径下执行。
开启远程调试支持:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,
address=8000,suspend=n -jar target/springbootpractice-0.0.1-SNAPSHOT.jar
Springdevtools
一些特定的资源改变时没有必要引起重启。有一些不会引起重启,但是会重加载。如果你想自定义的设置一下,可以使用 spring.devtools.restart.exclude 属性。如下:
spring.devtools.restart.exclude=static/&&,public/&&
-
如果想在默认的设置之外再添加新的排除选项,可以使用 spring.devtools.restart.additional-exclude 属性。
-
如果想在修改classpath之外的文件时也让应用重启,可以使用 spring.devtools.restart.additional-paths 属
如果想完全禁止自动重启,需要在调用 SpringApplication.run(..) 之前设置一个System属性。如下:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(MyApp.class, args);
}
静态资源导入
需要注意:templates 对外可见。 static 被保护,并且这样引用找不到。templates 目录下的模板与 static 目录下的 assets,css,image,js 目录同级。
<script src="../static/assets/js/ace-extra.min.js"></script>
这样才可以:
<script src="/assets/js/ace-extra.min.js"></script>
或者使用 thymeleaf 语法:
<script th:src="@{/assets/js/ace-extra.min.js}"></script>
BootStrap 字体目标:
如图红圈中,内容在复制引用时排除在外。只需复制icon-minus
即可。
<i class="icon-user orange"></i>