springboot
文章平均质量分 60
markrenChina
不将变量声明为某个特定的具体类的实例对象,而是让他遵守从抽象类所定义的接口。
展开
-
JAVA是怎么从静态语言兼容动态语言编程的
类加载机制基础知识每个Java程序至少拥有三个类加载器:引导类加载器平台类加载器系统类加载器(应用加载器)引导类加载器负责加载jdk内部模块中的平台类,没有对应得ClassLoader对象。java9之前,java平台类位于rt.jar。java9之后,java平台模块化,每个平台模块都包含一个JMOD文件。平台类加载器会加载引导类加载器没有加载得Java平台所有的类。系统类加载器会从模块路径和类路径中加载应用类。除了引导类加载器外,每个类加载器都有一个父类加载器。类加载,优先使用父原创 2022-01-29 19:43:33 · 941 阅读 · 1 评论 -
spring boot 2.4.2 下r2dbc不解析real[]
公司有一个老的C#服务端项目迁移Java,结果:spring boot 2.4.2 下r2dbc不解析real[]是因为 默认的io.r2dbc.postgresql 版本io.r2dbc.postgresql.codec#DefaultCodecs 默认没有 Float数组的编码器如果不升级版本需要自己写个编码器,实现一下AbstractArrayCodec,具体可以抄一下新版本下的已经实现FloatArrayCodec的源码。DefaultCodecs 实现了一个注册接口,手动把编码器注册进原创 2021-12-23 12:55:49 · 349 阅读 · 0 评论 -
redis devops(二) springboot 2.4.2 集成r2dbc
Spring boot 开发本节内容的版本声明: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version&原创 2021-12-21 15:41:33 · 1709 阅读 · 0 评论 -
redis devops(一) v6.2.6版本 3主3从集群部署
运维: 3主3从6台云主机进入opt目录cd /opt根据官网下载安装。wget https://download.redis.io/releases/redis-6.2.6.tar.gztar xzf redis-6.2.6.tar.gzcd redis-6.2.6make接着官网不讲了,在usr/local/bin 下加入快捷方式make install建立一个config目录,我的目录建在usr/local/bin 下,可任意cd /usr/local/binmkdir原创 2021-12-18 15:26:07 · 1066 阅读 · 0 评论 -
spring boot 2.4.2 适配nacos实现注册中心与负载均衡
kotlin 1.3的版本已经被最新的idea标记为弃用。在单独打开一个分模块工程,居然给我看这个Kotlin: Language version 1.3 is no longer supported; please, use version 1.4最后只能这样临时解决如果在2.3.7提升kotlin版本,会收到kotlin/collections/MapsKt的错误。应该是1.4删掉会移动了一个类。生版本是一个很好的选择。spring cloud alibaba 官方的版本推荐虽然很早就标原创 2021-11-24 15:31:17 · 3551 阅读 · 0 评论 -
R2DBC在spring boot 2.3.7版本下多主键CRUD的方式
很久没写博客了,因为又被拉去带搞spring了!本文内容基于spring boot 2.3.7.RELEASE。R2DBC接入在1月份的文章有讲,但是注意版本差异,后面的版本R2DBC从整个包都发生了迁移。选择2.3.7是因为这是能比较好适配nacos的最高版本的spring boot。在spring cloud alibaba下,对新版本的兼容是非常滞后的。题外话!R2DBC ReactiveCrudRepository 并不支持多主键(至少在2.3.7我没有找到支持的方式)。第一个,你就找不到合适原创 2021-11-06 21:21:47 · 561 阅读 · 0 评论 -
利用DnsPod Api解决拨号ipv4改变,随时随地远程回家
spring框架下测试成功2种请求方式,可以修改ipv4解析用官方示例来说明//官方curl示例curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=LOGIN_TOKEN&format=json&domain_id=2317346&record_id=16894439&record_line_id=10%3D0&sub_domain=www'举例kotlin代码如下第一种,模拟curl -X原创 2021-05-03 16:05:15 · 176 阅读 · 0 评论 -
利用WorkManager实现apk下载
jetpack加入WorkManager后,后台的实现基本上实现起来非常方便。首先,我们需要获取到新版本信息,然后如果需要更新就下载新版本的apk,2个串行的worker。app客户端部分去年写的下载客户端实现核验版本信息的worker示例:class VerifyVersionWorker(context: Context, parameters: WorkerParameters) : CoroutineWorker(context, parameters) { overrid原创 2021-04-17 10:49:10 · 1178 阅读 · 0 评论 -
nacos 连不上数据库的一个坑
nacos/conf 目录下nacos-mysql.sql 一般用这个把nacos的配置持久化到mysql数据库里面每一张表前都注释有/******************************************//* 数据库全名 = nacos_config *//* 表名称 = config_info *//******************************************/CREATE TABLE `config_info` (数据库全名 =原创 2021-03-27 08:46:45 · 9821 阅读 · 3 评论 -
Spring boot WebFlux 编程模型选择
WebFlux有两种编程模型传统的 Annotated Controllers 注释控制器轻量的 Functional Endpoints 函数式后端Annotated Controllers 注释控制器 使用方式就是传统的MVC那套,多了一个@RequestBody注释。允许返回Flux,Mono类型,Kotlin可以使用挂起函数(suspend)和返回类型特有的返回类型Flow或deferred。 @GetMapping("/suspend") suspend fun suspend原创 2021-03-13 13:46:05 · 281 阅读 · 0 评论 -
响应式学习(五)spring Security
SecuritySecurity基础知识认证void configure(AuthenticationManagerBuilder auth)基于内存用户认证(inMemoryAuthentication)基于数据库用户认证(jdbcAuthentication)基于LDAP服务器方式用户认证(ldapAuthentication)自定义用户认证(UserDetailsService)(适用于响应式)自定义用户认证详细说明:数据库映射实体类需要实现UserDetails接口,重写get原创 2021-02-27 13:16:54 · 922 阅读 · 0 评论 -
响应式学习(四)ProjectReactor工厂方法和错误处理
工厂方法创建流:push工厂方法demo通过单线程生产者(在同一时间只有一个线程,可以调用next,complete或error)创建Flux实例,此方法适配于异步,单线程,多值Api,无须关注背压和取消。同样可以桥接接口,示例见create示例(把create换成push)push()并且create()两者都允许设置onRequest使用者以管理请求量并确保仅在有待处理的请求时才通过接收器推送数据。onCancel 首先调用,仅用于取消信号。onDispose 为完成,错误或取消信号而调用原创 2021-02-15 21:29:43 · 622 阅读 · 0 评论 -
响应式学习(三)ProjectReactor
Rxjava2与ProjectReactor 比较Observable: Rxjava2对比Rxjava1不再接受null。Observable既不实现背压,也不实现Publisher(响应式规范),不推荐作用与大量元素,但其开销小于Flowable、具有toFlowable方法,转换需要选择背压策略。Flowable: 直接对应Flux,实现了Publisher。Single: 生成且仅生成一个元素的流,不继承Publisher,使用toFlowable不要背压策略。对比mono更原创 2021-02-14 21:09:33 · 1037 阅读 · 0 评论 -
响应式学习(二)推与拉
拉的理解:由程序发起从数据源读取。推的理解:由数据源往响应接口推送(通常也需要程序发起请求一次)。背压控制:推与拉的混合。纯拉示例(purepull):逐个请求下一个元素会导致从服务传递请求到数据库上花费额外的时间。大部分时间用于等待。结合批处理优化(batchedpull):根据数量批处理拉,但是还是没有解决空闲等待的问题推的方式(pushmodel)public Observable<Item> list(int count) { return dbClient.ge原创 2021-02-13 14:04:37 · 320 阅读 · 1 评论 -
响应式学习(一)Rxjava
Rxjava基本思路:观察者模式的订阅者接口:public interface Observer<T> { void observe(T event);}观察者模式目标对象Subject,rxjava中称为Subject或Observable接口:public interface Subject<T> { void registerObserver(Observer<T> observer); void unregisterObserv原创 2021-02-12 12:32:02 · 151 阅读 · 0 评论 -
Kotlin自带Map无法调用java.util.Map在webClient调用uri(uri,Map)方法时的bug
Kotlin在使用WebClient调用uri(uri,Map)方法时,并不会拼接params,编译器也不会出错。具体是因为uri还有一个方法uri(uri, Object…),Kotlin特有的Map和java.util.Map并不一样。解决方案:是用UriComponentsBuilder的queryParams(MultiValueMap)拼接好了再调用uri(URI)传入。下面是啰嗦的:发现的原因是webclient在编写使用动态代理模拟retrofit2风格的REST消费方式时,定义了一个R原创 2021-02-05 11:31:27 · 294 阅读 · 0 评论 -
mariadb/mysql R2DBC(CRUD)方式接入spring boot (二)
依然是start.spring.io创建,大致的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r2dbc</artifactId> </dependency> <dependency> <groupId>org.springframew原创 2021-01-29 16:55:57 · 769 阅读 · 0 评论 -
mariadb/mysql R2DBC方式接入spring boot(一)
start.spring.io 最近可以直接选取mariadb接入R2DBC了,大致需要加入以下几个包:<!--引入r2dbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r2dbc</artifactId> <原创 2021-01-28 16:20:54 · 889 阅读 · 0 评论 -
redis代码迁徙到redis-reactive
原来获取方式(部分示例):import org.springframework.beans.factory.annotation.Autowiredimport org.springframework.data.redis.core.RedisTemplateimport org.springframework.stereotype.Repositoryimport java.time.Durationimport java.util.concurrent.TimeUnit@Repositor原创 2021-01-28 10:38:08 · 616 阅读 · 0 评论 -
spring boot 无法捕捉MethodArgumentNotValidException
如果是webflux用WebExchangeBindException替换MethodArgumentNotValidException原创 2021-01-10 09:52:42 · 2741 阅读 · 0 评论 -
《第一行代码(第2版)》下载示例 简易服务端实现apk自动下载
开发工具: eclipse + spring tools 4sring.io 生成一个web项目,导入eclipse。(配置mvn,导入什么的不说,我也是看的教程)导入之后,新建一个Controller类加注解@Controller新建一个public String GetVersion()方法return 一个url,加注解@RequestMapping(“getVersionInfo”)。上面是基础操作,下面开始分几种情况讲。第一种我现在用的实现方式:云服务器+云对象存储服务器这种情况我只原创 2020-05-17 15:56:35 · 301 阅读 · 0 评论