做电影网站一年赚多少钱,可以做超链接或锚文本的网站有哪些,项目建设的背景怎么写,html编辑器有哪些《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
《国内最全的Spring Boot系列之七》
Spring的Sma… 《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
《国内最全的Spring Boot系列之七》
Spring的SmartLifecycle可以没用过但没听过就不好了- 第517篇
SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇
SpringBoot 中多例模式的神秘世界用法区别以及应用场景最后的灵魂拷问会吗- 第519篇
SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 - 第520篇
SpringBoot多例模式在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG- 521篇
SpringBoot基本原理轻松应对面试官 - 第522篇 导读
这一节和大家分享一下Spring Boot的一些小技巧知道这些小技巧有助于你在实际项目中解决一些特殊的需求。 技巧一调整 bean 的加载顺序
调整 bean 的加载顺序的方式有很多种
1可以通过 Autowired 的方式让一个 bean 进行初始化
例如 ServiceA 加载之前一定要初始化 ServiceB则可以将 ServiceB 通过 Autowired 时行注入让 ServiceB 在 ServiceA 之前时行初始化
2通过注解ConditionalOnBean(xxx) 说明这两个Bean的依赖关系。 技巧二classloader.getResource() 拿不到资源
使用 IDEA 运行 springboot 程序与 java -jar 运行 springboot 程序时 ClassLoader 不同导致 classloader.getResource() 拿不到资源
使用 this.getClass().getClassLoader() 获取 classloader 时运行方式不同结果不一样
使用 IDEA 运行 springboot 程序时sun.misc.Launcher$AppClassLoader18b4aac2
使用 java -jar 运行打包后的 jar 包时org.springframework.boot.loader.LaunchedURLClassLoader71dac704
LaunchedURLClassLoader 在以下 jar 包依赖中
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-loader/artifactId/dependency
使用下面的代码可以拿到类的代码的路径
如jar:file:/data/spring-boot-theory.jar!/BOOT-INF/lib/spring-aop-5.0.4.RELEASE.jar!/org/springframework/aop/SpringProxy.class
ProtectionDomain protectionDomain getClass().getProtectionDomain();CodeSource codeSource protectionDomain.getCodeSource();URI location (codeSource null ? null : codeSource.getLocation().toURI());
对于原始的JarFile URL只支持一个!/SpringBoot 扩展了此协议使其支持多个!/以实现 jar in jar 的加载资源方式。
但是取到了资源路径原生的 new File() 还是处理不了这种资源路径的。
我们通过传统的方式取不到资源了即使取到了也没法直接使用那在 SpringBoot 中我们应该怎么获取资源呢
可以参考 MyBatisPlus 中对 xml 文件的处理com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties#mapperLocations
技巧三排除自动配置的几种方式
1
SpringBootApplication(exclude DataSourceAutoConfiguration.class)
2
SpringBootApplication(excludeName org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration)
3配置文件配置
spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
技巧四 ConditionalOnProperty 根据配置加载不同的 bean
场景对 redis 配置进行封装实现自动化配置能兼容哨兵模式和集群模式。
想到在 redis 配置中加一个 redis.type 来区分集群和哨兵模式redis.typecluster 或 sentinel然后根据 type 来分别加载 JedisConnectionFactory、RedisClusterConfiguration、RedisSentinelConfiguration
配置如下
ConditionalOnProperty(name redis.type, havingValue cluster)ConditionalOnMissingBeanBeanpublic RedisClusterConfiguration redisClusterConfiguration() {}ConditionalOnProperty(name redis.type, havingValue sentinel)ConditionalOnMissingBeanBeanpublic RedisSentinelConfiguration redisSentinelConfiguration() {SetString sentinelHostAndPorts Sets.newHashSet(Splitter.on(,).split(hostName).iterator());RedisSentinelConfiguration redisSentinelConfiguration new RedisSentinelConfiguration(masterName, sentinelHostAndPorts);return redisSentinelConfiguration;} 技巧五 实现用户行为记录的四种方式
根据产品经理要求需要对用户的行为进行记录。重点记录用户的姓名、IP、操作行为、请求参数和返回参数。先采用暴力解决问题每个行为增加记录行为当然这个是最不恰当的方案工作量大不说还不具有扩展性。有4种方案来实现该需求
1AOP切面编程实现在每一个需要记录日志的方法前增加切点然后对切点进行处理即可。
2Interceptor拦截器实现定义拦截器类 OperateLogInterceptor 类并实现 HandlerInterceptor 接口。
3Filter过滤器实现
4ArgumentResolver参数解析器是 Spring 提供的用于解析自定义参数的工具使用它我们可以将参数在进入Controller Action之前就组合成我们想要的样子。 技巧六 测试中使用随机HTTP端口
在Spring Boot测试中不应该使用静态端口为了对指定的测试设置该选项你需要设置 SpringBootTest 注解中的 webEnvironment 字段将它的指定为 RANDOM_PORT 而不是默认的 DEFINED_PORT 。配置完后你可以使用 LocalServerPort 注解将这个随机生成的端口号注入到测试类中。 技巧七使用DataJpaTest来测试JPA接口
对于集成测试通常情况下你可能会使用 SpringBootTest 来注释测试类这样做的问题在于它启动了整个应用程序上下文这会增加运行测试所需的总时间。更好的选择是你可以使用 DataJpaTest 来启动JPA组件和带有 Repository 注解的bean。默认情况下它会在日志中记录SQL查询语句因此一个好主意是使用 showSql 字段禁用这个特性。此外如果你希望将带有 Service 或 Component 注解的bean包含到测试中可以使用 Import 注解。 历史文章文章累计520
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
《国内最全的Spring Boot系列之六》
《国内最全的Spring Boot系列之七》
抖音主播/电商人员有福了利用Suno创作产品宣传让产品动起来-小米Su7 - 第510篇
Spring Boot整合ElasticSearch实战 - 第511篇
Transaction rolled back because it has been marked as - 第512篇
五音不全也浪漫521清华学霸为爱人写歌 - 第513篇
一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇
idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇
Noisee AI中文站网页版 AI 音乐生成视频全新登场快来抢先体验——国内第一个登场的中文站来袭 - 516篇
Spring的SmartLifecycle可以没用过但没听过就不好了- 第517篇
SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇
SpringBoot 中多例模式的神秘世界用法区别以及应用场景最后的灵魂拷问会吗- 第519篇
SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 - 第520篇
SpringBoot多例模式在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG- 521篇
SpringBoot基本原理轻松应对面试官 - 第522篇