202010-10 通过简单方法实现spring boot web项目 搭建效果为:直接在网页输入请求,在页面中显示一行文字:Hello,SpringBoot与一般的wen项目不同的地方:1、不需要配置web.xml文件,但需要注解@SpringBootApplication等2、一切和spring有关的jar包都不需要版本号,springcloud会给你选择它最稳定的版本3、它会定位publicstaticvoidmain()方法来标记为可运行类,必须在主路径下4、启动方式:a.右键运行main方法b.由于我们使用了spring-boot-starter-parentPOM,所... 继续阅读 >
202010-10 Spring Security 中细化权限粒度的方法 有小伙伴表示微人事(https://github.com/lenve/vhr)的权限粒度不够细。不过松哥想说的是,技术都是相通的,明白了vhr中权限管理的原理,在此基础上就可以去细化权限管理粒度,细化过程和还是用的vhr中用的技术,只不过设计层面重新规划而已。当然今天我想说的并不是这个话题,主要是想和大家聊一聊SpringSecurity中权限管理粒度细化的问题。因为这个问题会涉及到不同的权限管理模型,今天和小伙伴们聊一聊~1.权限管理模型... 继续阅读 >
202010-10 Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作 实现思路重写Spring的AbstractRoutingDataSource抽象类的determineCurrentLookupKey方法。我们来看下Spring-AbstractRoutingDataSource的源码AbstractRoutingDataSource获取数据源之前会先调用determineCurrentLookupKey方法查找当前的lookupKey。ObjectlookupKey=determineCurrentLookupKey();DataSourcedataSource=this.resolvedDataSources.get(lookupKey);.......returndataSource;lookupKey为数据源标识,因此通过重写... 继续阅读 >
202010-10 spring Retryable注解实现重试详解 spring-boot:1.5.3.RELEASE,spring-retry-1.2.0.RELEASE使用方法引入pom//版本号继承spring-boot依赖管理的pom<dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency>启用重试@Configuration@ImportResource(locations={"classpath*:spring/app-context-*"})@En... 继续阅读 >
202010-10 浅谈spring的重试机制无效@Retryable@EnableRetry spring-retry模块支持方法和类、接口、枚举级别的重试方式很简单,引入pom包<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>lastest</version></parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--https://mvnrepository.com/artifact/org.springframework.retry/... 继续阅读 >
202010-10 Spring的异常重试框架Spring Retry简单配置操作 相关api见:点击进入/**Copyright2014theoriginalauthororauthors.**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,software*distributedundertheLicense... 继续阅读 >
202010-10 spring解决循环依赖的简单方法 Spring内部如何解决循环依赖,一定是单默认的单例Bean中,属性互相引用的场景。比如几个Bean之间的互相引用:或者setter方式原型,prototype原型(Prototype)的场景是不支持循环依赖的,因为“prototype”作用域的Bean,为每一个bean请求提供一个实例,Spring容器不进行缓存,因此无法提前暴露一个创建中的Bean,会抛出异常。构造器参数循环依赖Spring容器会将每一个正在创建的Bean标识符放在一个“当前创建Bean池”中,Bean标识符... 继续阅读 >
202010-10 Spring Boot事务配置操作 1、在启动主类添加注解:@EnableTransactionManagement来启用注解式事务管理,相当于之前在xml中配置的<tx:annotation-driven/>注解驱动。2、在需要事务的类或者方法上面添加@Transactional()注解,里面可以配置需要的粒度:这么多东西提供配置:Isolation:隔离级别隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。我们可以看org.springframework.transaction.annota... 继续阅读 >
202010-10 通过工厂模式返回Spring Bean方法解析 工厂返回的可以是一个具体的对象,比如造一辆车,可以返回一个自行车对象,或者汽车对象。但是在Spring中需要工厂返回一个具体的Service,这就是一个抽象工厂了一种方法是反射,个人觉得这种方式不好;还有一种方法是巧妙的使用Map对象,工厂的一个优点就是可扩展,对于这种方式可以说是体现的淋漓尽致了,可以定义多个map,map里也可以扩充假设现在有一个接口类:BingService以及实现了这个接口的两个实现类:OneBingServiceImp... 继续阅读 >
202010-10 为spring get请求添加自定义的参数处理操作(如下划线转驼峰) 1.生成自己的注解(为了确定在哪些位置使用)/***关闭patchdelete的model处理,否则会报错*/@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceAliasProcessor{}/***处理Get请求参数的驼峰问题*@authorlw*/@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public@interfaceValueFrom{/***参数名(别名)列表*/String[]value();}2.实现自己的Servl... 继续阅读 >
202010-10 解决spring cloud服务启动之后回到命令行会自动挂掉问题 我们的springcloud微服务一般是打成jar包发布的,Linux下启动jar包和windows下一样,都是java-jar包名,实际操作过的小伙伴可能会遇到这种情况:用java-jar启动之后,再切回到命令行服务会挂掉,怎么解决呢?使用nohup命令就不会了!例:jar包:micro-service/micro-eureka-server-0.0.1-SNAPSHOT.jar启动命令:ohupjava-jarmicro-service/micro-eureka-server-0.0.1-SNAPSHOT.jar&启动之后用ctrl+c回到命令行就不会挂掉... 继续阅读 >
202010-10 Spring事务失效的几种原因 数据库引擎不支持事务在MySQL数据库中有几种引擎(InnoDB,MyISAM,Memory等等),仅仅InnoDB支持事务,如果数据库底层都不支持事务的话,那么再怎么折腾都是白搭.@transactional加在private方法上@Transactional只能加在public方法上,如果需要在private方法中加入事务,可以使用Aspect配transactionManager使用.本类方法调本类另一个方法例如:@ServicepublicclassUserServiceImplimplementsUserService{@Transactionalpublicvoi... 继续阅读 >
202010-10 如何使用新方式编写Spring MVC接口 1.前言通常我们编写SpringMVC接口的范式是这样的:@RestController@RequestMapping("/v1/userinfo")publicclassUserInfoController{@GetMapping("/foo")publicStringfoo(){return"felord.cn";}}这种我都写吐了,今天换个口味,使用Spring5新引入的函数式端点(FunctionalEndpoints)来耍耍。这种方式同样支持SpringWebflux。请注意可使用该特性的Spring版本不低于Spring5.22.依赖为了演示,这里极... 继续阅读 >
202010-10 spring通过filter,Interceptor统一处理ResponseBody的返回值操作 项目中有一个需求,需要统一处理一下@ResponseBody注解的返回值(比如打印),在网上找了一下,有建议用AOP来做的,但是个人认为项目中用多个AOP并不优雅;通过google,找到了spring的ResponseBodyAdvice接口,用来对返回体做统一处理。例如:统一打印返回体中的内容@ControllerAdvice(basePackages="cc.openwiki.controller.biz")publicclassLogResponseAdviceimplementsResponseBodyAdvice<Object>{@Overridepublicbool... 继续阅读 >
202010-10 Spring Batch远程分区的本地Jar包模式的代码详解 1前言SpringBatch远程分区对于大量数据的处理非常擅长,它的实现有多种方式,如本地Jar包模式、MQ模式、Kubernetes模式。这三种模式的如下:(1)本地Jar包模式:分区处理的worker为一个Java进程,从jar包启动,通过jvm参数和数据库传递参数;官方提供示例代码。(2)MQ模式:worker是一个常驻进程,Manager和Worker通过消息队列来传递参数;网上有不少相关示例代码。(3)Kubernetes模式:worker为K8s中的Pod,Manager直接启动P... 继续阅读 >
202010-10 解决Spring Boot项目端口8080被占用的问题 错误提示:2018-11-1221:25:58.422ERROR15916—[restartedMain]o.s.b.d.LoggingFailureAnalysisReporter:APPLICATIONFAILEDTOSTARTDescription:TheTomcatconnectorconfiguredtolistenonport8080failedtostart.Theportmayalreadybeinuseortheconnectormaybemisconfigured.Action:Verifytheconnector'sconfiguration,identifyandstopanyprocessthat'slisteningonport8080,orconfi... 继续阅读 >