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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容