当前位置: 首页 > news >正文

网站模板工具浙江省兰溪建设局网站

网站模板工具,浙江省兰溪建设局网站,网站四网合一,外贸商城 wordpress《国内最全的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$AppClassLoader@18b4aac2

使用 java -jar 运行打包后的 jar 包时,org.springframework.boot.loader.LaunchedURLClassLoader@71dac704

LaunchedURLClassLoader 在以下 jar 包依赖中:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-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.type=cluster 或 sentinel),然后根据 type 来分别加载 JedisConnectionFactory、RedisClusterConfiguration、RedisSentinelConfiguration

配置如下:

@ConditionalOnProperty(name = "redis.type", havingValue = "cluster")@ConditionalOnMissingBean@Beanpublic RedisClusterConfiguration redisClusterConfiguration() {}@ConditionalOnProperty(name = "redis.type", havingValue = "sentinel")@ConditionalOnMissingBean@Beanpublic RedisSentinelConfiguration redisSentinelConfiguration() {Set<String> sentinelHostAndPorts = Sets.newHashSet(Splitter.on(",").split(hostName).iterator());RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(masterName, sentinelHostAndPorts);return redisSentinelConfiguration;}

技巧五: 实现用户行为记录的四种方式

根据产品经理要求,需要对用户的行为进行记录。重点记录用户的姓名、IP、操作行为、请求参数和返回参数。先采用暴力解决问题,每个行为增加记录行为,当然这个是最不恰当的方案,工作量大不说,还不具有扩展性。有4种方案来实现该需求:

(1)AOP切面编程实现:在每一个需要记录日志的方法前增加切点,然后对切点进行处理即可。

(2)Interceptor拦截器实现:定义拦截器类 OperateLogInterceptor 类并实现 HandlerInterceptor 接口。

(3)Filter过滤器实现

(4)ArgumentResolver:参数解析器是 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篇

http://www.yayakq.cn/news/899405/

相关文章:

  • 做微商那个网站好营销型网站案例
  • 云主机网站如何备份移动网上营业厅官网
  • 长春网站建设公司怎么样江苏华东建设基础工程有限公司网站
  • jsp做的网站答辩问题湘潭电大网站
  • 平台网站做数据维护需要多久怎么做服务网站
  • 私做网站名电子章公司主页网站开发
  • 东莞免费网站建设网络营销汾阳网架公司
  • 抚顺市 网站建设如何做广告宣传与推广
  • 合肥做网站建设网络搭建百度百科
  • 一套网站源码多少钱上海板块做企业优化的公司
  • 宿迁网站建设做毕业网站的周记
  • 六种常见的网站类型给点没封的网址好人一生平安
  • 如何做网站编辑 ?]技术国外注册机网站
  • 有没有专门做标书的网站做全国性的app网站推广多少
  • 网站维护常识网络推广工作任务
  • 佛山快速建站哪家服务专业网站布局建设
  • 如何创新网站建设模式wordpress下载
  • 河北建设厅网站修改密码在哪互联网营销师报名官网
  • 网站开发工具和平台dw网页设计制作网站的成品
  • 徐州免费模板建站网站建设行业swot分析
  • 网站编辑信息怎么做做报名统计的网站
  • wordpress情侣网站源码WordPress文章显示html
  • 网站注意事项北京网站建设公司华网制作作
  • 做外贸的网站简称为什么网站北京商地网站建设公司
  • 凡科网站建设推广常州企业网站建设
  • 秀洲住房与建设局网站黄骅市旅游景点有哪些
  • 哪些网站做国际贸易比较好温州网站建设钱
  • 企业网站的建立如何带来询盘免费企业
  • html5网站开发环境的搭建免费做网站站标
  • 男鞋 东莞网站建设杭州模板网站制作