官网:

http://springboot.fun/

打包

<build>
<sourceDirectory>${project.basedir}/src</sourceDirectory>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build>

build 必须包含 sourceDirectory , resources , 才能打包进 jar 包。

收集到一个比较全的:

https://blog.csdn.net/xiaoyu411502/article/details/52474037

Idea 中 SpringBoot 方式启动与 Application 启动的区别

SpringBoot 启动, 命令多了以下参数 :

-XX:TieredStopAtLevel=1

-noverify

-Dspring.output.ansi.enabled=always

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=55414

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

-Djava.rmi.server.hostname=localhost

-Dspring.liveBeansView.mbeanDomain

-Dspring.application.admin.enabled=true

遇到一个问题. SpringBoot方式启动没有错误. Application启动报错:

Caused by: java.lang.ClassNotFoundException: kotlin.reflect.KotlinReflectionInternalError

对比发现: Application上添加 -noverify 就可以了.

调试

  • springboot 传参,如果参数是空的, 则不写 =

  • 代理模式用的方法: Proxy.newProxyInstance

  • 在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被废弃,目前找到解决方案就有两种

https://blog.csdn.net/lenkvin/article/details/79482205

  • HttpServlet 定义URL

    @ServletComponentScan 配合 @WebServlet ,再使用 HttpServlet

https://www.cnblogs.com/NeverCtrl-C/p/8191920.html

  • Thread.currentThread().contextClassLoader.getResource("").path

三种环境(通过 Thread.currentThread().contextClassLoader.getResource("").protocol 判断)(.path 和 .file 是相同的)

  • jar : file:/D:/JavaApp/app.shop.java/corp/target/shop-corp-3.0.0.jar!/BOOT-INF/classes!/
  • war : 没调呢。
  • file : /D:/JavaApp/pzx.java/entity/target/classes/

Jar包的情况, 可以通过获取私有字段: handler.jarFile.name 获取到: D:\JavaApp\app.shop.java\corp\target\shop-corp-3.0.0.jar

  • bootstrap.yml 早于 applicatoin.yml

http://www.jb51.net/article/139112.htm

SpringMvc 设置消息转换 设置返回Json的格式。

在所有的消息转换中找到目标,再修改。

       @Autowired
lateinit var converter: MappingJackson2HttpMessageConverter //注册返回的消息体。
handerAdapter.messageConverters.filter { it is MappingJackson2HttpMessageConverter }.map { it as MappingJackson2HttpMessageConverter }.forEach {
it.objectMapper.registerModule(CustomModule()) @Component
class CustomModule() : SimpleModule(PackageVersion.VERSION) {
init {
addSerializer(ObjectId::class.java, ObjectIdJsonSerializer());
addSerializer(LocalDate::class.java, LocalDateJsonSerializer());
addSerializer(LocalTime::class.java, LocalTimeJsonSerializer());
addSerializer(LocalDateTime::class.java, LocalDateTimeJsonSerializer()); addDeserializer(LocalDate::class.java, LocalDateJsonDeserializer())
addDeserializer(LocalTime::class.java, LocalTimeJsonDeserializer())
addDeserializer(LocalDateTime::class.java, LocalDateTimeJsonDeserializer())
}
} class LocalTimeJsonSerializer : JsonSerializer<LocalTime>() {
override fun serialize(value: LocalTime?, generator: JsonGenerator, serializers: SerializerProvider) {
if (value == null) {
generator.writeNull()
} else {
generator.writeString(value.AsString())
}
}
}
}

设置默认字符集

        //设置 StringHttpMessageConverter 的字符集
handerAdapter.messageConverters.filter { it is StringHttpMessageConverter }.map { it as StringHttpMessageConverter }.forEach {
it.setWriteAcceptCharset(false)
it.defaultCharset = Charset.forName("utf-8")
}

设置请求参数与Action函数参数对应关系

var listResolvers = mutableListOf<HandlerMethodArgumentResolver>()
listResolvers.add(RequestParameterConverter(listOf(ApiParam::class.java))); listResolvers.addAll(handerAdapter.argumentResolvers ?: listOf()) handerAdapter.argumentResolvers = listResolvers;

执行 Test 的时候, Bean 不创建的问题

设置 test resource , 重新 import 会失效.

在 project structure -> module -> 设置 test resources 时,下面有提示. 任何改变都会让它失效. 所以. 设置 test resource 是最后一步.

classLoader

Thread.currentThread().contextClassLoader 有 私有字段 classes ,表示加载之后的类。 类的加载有过程,在 Test 环境下,发现有的项目在执行Test时,当前项目的类并没有完全加载。

Bean的初始化.

调试中发现, Bean 并没有自动创建 .

解决

启动类上,添加 @Import ,让它强制执行,可以让该 Bean 强制创建 . 这种方法没有解决根本问题, 因为有大量的Bean.

找到原因如下:

SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描的。

所以,

  • 把 Test 的启动类的包名,改为 Bean 的顶级包名即可.

    如: Bean包名: com.abc.def , Test启动类包名: com.abc 或 com 均可.

  • 或者 @ComponentScan(basePackages=arrayOf("com","org"))

    经测试, 这个方法在 spring-boot 下不行。

  • 使用: @SpringBootApplication(scanBasePackages = arrayOf("nbcp","pandian"))

    scanBasePackages 写所有启动加载的包。

见: https://zhidao.baidu.com/question/716351765859826445.html

定时任务总开关

https://my.oschina.net/jspp/blog/1604553

上文说的测试了一下,没有效果.

@Component open class

对于 @Component 注解的 class ,一定不能是 final , 必须是 open的. 因为Srping会使用 cglib 继承自该类, 重写该类的方法.

取消Filter自动注册

https://www.jianshu.com/p/bf79fdab9c19

取消自动连接数据库:

https://blog.csdn.net/u012240455/article/details/82356075

@EnableAutoConfiguration(exclude = arrayOf(DataSourceAutoConfiguration::class))

新建非Web SpringBoot项目.

http://www.jianshu.com/p/5d4ffe267596

继承 CommandLineRunner

@SpringBootApplication
class SpringBootConsoleApplication : CommandLineRunner { companion object {
@Throws(Exception::class)
@JvmStatic
fun main(args: Array<String>) {
//disabled banner, don't want to see the spring logo
val app = SpringApplication(SpringBootConsoleApplication::class.java)
app.setBannerMode(Banner.Mode.OFF)
app.run(*args) }
} // Put your logic here.
@Throws(Exception::class)
override fun run(vararg args: String) { fixTagData() exit(0)
}
}

EnableRedisHttpSession

Redis数据库会有: spring:session:sessions:2519c4cb-4dfb-42c7-9c19-334cc2800e54 的 Hash数据。里有有以下Field:

maxInactiveInterval

sessionAttr:ValidateCode

lastAccessedTime

sessionAttr:PzxSession

creationTime

Java如何读出?
读出字符串容易: var d = rer.jedis(11).jedis.hget("spring:session:sessions:" + id, "sessionAttr:PzxSession")。
反序列化。 ObjectInputStream( ByteArrayInputStream(d.toByteArray().toMutableList().slice(6).toByteArray())).readObject() 报错: invalid stream header: EFBFBDEF, 因为: 读出String的时候就已经错了。原因: https://www.cnblogs.com/yanlong300/p/7692595.html
如何读出二进制流?
var data = rer.jedis(11).jedis.hget (("spring:session:sessions:" + id).toByteArray(), "sessionAttr:PzxSession".toByteArray())
var stream = ObjectInputStream(ByteArrayInputStream(data));
var ent = stream.readObject() as PzxSessionData;

JSessionID 的值 。

JSESSIONID == Base64( request.requestSessionId )

spring:session:sessions:${request.requestSessionId}

spring:session:sessions:${request.requestSessionId}. sessionAttr:${ session.key } == serial ( session.value )

SpringBoot笔记的更多相关文章

  1. SpringBoot笔记十六:ElasticSearch

    目录 ElasticSearch官方文档 ElasticSearch安装 ElasticSearch简介 ElasticSearch操作数据,RESTful风格 存储 检查是否存在 删除 查询 更新 ...

  2. SpringBoot笔记一

    1 开始 1.1 spring介绍 Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run". 我们为Spring平台及第三方库 ...

  3. 【SpringBoot笔记】SpringBoot整合Druid数据连接池

    废话少说,按SpringBoot的老套路来. [step1]:添加依赖 <!-- 数据库连接池 --> <dependency> <groupId>com.alib ...

  4. SpringBoot笔记十七:热部署

    目录 什么是热部署 Devtools热部署 什么是热部署 热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用. 举个例子,王者荣耀的更新有时候就是热部署,热更新,就是他提示你更新,更新40 ...

  5. SpringBoot笔记十四:消息队列

    目录 什么是消息队列 消息队列的作用 异步通信 应用解耦 流量削峰 RabbitMQ RabbitMQ流程简介 RabbitMQ的三种模式 安装RabbitMQ RabbitMQ交换器路由和队列的创建 ...

  6. SpringBoot笔记十三:引入webjar资源和国际化处理

    目录 什么是webjar 怎么使用webjar 国际化 新建国际化配置文件 配置配置文件 使用配置文件 我们先来看一个html,带有css的,我们就以这个为准来讲解. 资源可以去我网盘下载 链接:ht ...

  7. springboot笔记1(转载于puresmile)

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  8. springboot笔记05——profile多环境配置切换

    前言 一个应用程序从开发到上线,往往需要经历几个阶段,例如开发.测试.上线.每个阶段所用到的环境的配置可能都是不一样的,Springboot 应用可以很方便地在各个环境中对配置进行切换.所以,今天主要 ...

  9. springboot笔记09——使用aop

    什么是AOP? aop(Aspect Oriented Programming)面向切面编程,是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装 ...

随机推荐

  1. SQL Server 中的回滚

    USE [TestDB] GO /****** 对象: Table [dbo].[Person] 脚本日期: 11/23/2008 13:37:48 ******/ SET ANSI_NULLS ON ...

  2. 扩展BootstapTable支持TreeGrid

    (function ($) { 'use strict'; var sprintf = function (str) { var args = arguments, flag = true, i = ...

  3. Linux删除文件实现回收站功能

    转载于 https://blog.csdn.net/u014057054/article/details/52126494 从事过服务器维护的人都知道rm.rm -rf 的厉害,执行起来一点也不马虎, ...

  4. fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题

    fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...

  5. openSUSE搭建OpenVPN

    目录 openSUSE搭建OpenVPN 环境 安装openVPN服务端 安装easy-rsa工具 配置vars文件 创建服务端证书及key 创建客户端证书 疏理证书文件 服务端配置 启动openvp ...

  6. Hadoop2.7.6_03_HDFS原理

    1. HDFS前言 l  设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l  在大数据系统中作用: 为各类分布式运算框架(如:m ...

  7. January 23rd, 2018 Week 04th Tuesday

    Remembrance is a form of meeting, forgetfulness is a form of freedom. 记忆是一种相遇,遗忘是一种自由. Cherish those ...

  8. January 06th, 2018 Week 01st Saturday

    In life the most interesting things tend to happen when you are on your way to do something else. 生活 ...

  9. js 提交表单添加csrf

    function post(path, shipmentMap, method) { method = method || "post"; // Set method to pos ...

  10. Oracle导入程序Imp的使用详解

    Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件.imp使用的基本格式:imp[username[/password[@service]]], ...