分类:编程

Java 类的加载和初始化

直接从书上抄来的,自己写一遍加深印象 类的加载 加载就是通过指定的类全限定名,获取此类的二进制字节流(可以是clazz文件或者直接内存读取或者远程网络,jar包等),然后将此二进制字节流转化为方法区的数据结构,在内存中生成一个代表这个类的java.lang.Class对象。 java.lang.Class这个类用于维护目标类,包括读取字段 读取构造函数,读取方法,创建实例(newInstance)等等。 class对象可以通过Class.forName(“java.lang.String”)获取,或者直接String.class获取, 或者”java.lan…

阅读全文 »

基于Spring深入源码学习RabbitMQ

这篇文章将继续学习RabbitMq的一些东西,为了更好的学习,阅读和理解相关源码是非常有必要的。本篇文章将简单讲解下与RabbitMQ交互所使用的几个类和方法。 基本注解 @RabbitListener(queues = queueName) public @interface RabbitListener { // 本监听器的唯一id String id() default “”; // 指定容器工厂 默认的是SimpleRabbitListenerContainerFactory String containerFactory() default “”; // 绑定的队列对象 通过名字绑定…

阅读全文 »

Spring Cloud整合RabbitMQ

0x1.导入maven依赖 现在你需要导入一个starter包就好了,不用理会什么版本。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 0x2.添加RabbitMQ配置 这里只需要配置下RabbitMQ服务端的连接参数就好了,其他的直接用默认配置。 spring: rabbitmq: host: localhost port: …

阅读全文 »

消息队列 MQ 总结(入门)

序言 在实际开发环境中,你可能会遇到如下场景: 1.系统运行中会在特定时间产生了大量日志,日志服务的磁盘的IO 性能跟不上,导致某些服务运行缓慢。 2.某服务A的功能可能会调用服务B,但服务B的处理逻辑又与A无关(仅仅需要通知B处理下一些东西) 3.服务又注册用户机制,需要验证邮箱,但是处理和发送邮件占用了整个接口时间的2/3,但验证邮件并不是注册阶段验证的。 这些例子中,都存在AB两个独立服务,A是消息的发布者,B是消息的订阅者。实际环境中可能是一对多的关系(A对应多个B 或者A对应BCD多个不同的服务) 通过例子我们不难看出某些情况下,服务之间的调用存在一定的耦合性,但这种耦合性又是非必要…

阅读全文 »

Windows下的RabbitMQ安装与开启Web管理界面

因为项目开发需要用到MQ,所以花点时间时间学习了一下,简单写点文章吧。毕竟好久没写博客了。 目前主流的MQ比如RabbitMQ,RocketMQ,Kafka之类的很多。我选择RabbitMQ是因为项目本身是类OA的,不会有太大的并发和性能需求,RabbitMQ的API完善,可以和spring 无缝整合,入门简单部署也简单。 所以选型方面就敲定了RabbitMQ。 0x0 ERLang 在安装RocketMQ之前我们需要安装下erlang语言环境。因为RocketMQ是基于erlang开发的,运行RocketMQ的时候需要erlang运行时环境。就有好比运行.net程序要安装net frmewo…

阅读全文 »

Sping boot Oauth2.0 添加记住我功能

现在各种系统的登入页面一般都会有记住密码,记住我的功能。在使用oauth的时候,framework本身就提供了相关功能。我们只需要简单的配置一下就可以使用了。 1.首先登入页面添加一个checkbox <input type=”checkbox” value=”true” name=”remember-me”>记住我 checkbox的name定义在 org.springframework.security.config.annotation.web.configurers.RememberMeConfigurer 类定义的代码片段: public final class Remembe…

阅读全文 »

MySQL 整表加密解决方案 keyring_file

说明 MySql社区版从5.7.11开始支持基于表的数据加密方案,模块名为keyring_file,支持加密整张表。这种是加密方式其实是基于文件加密的,一旦mysqld读取key启动后,将会解密整张表的数据,在mysql服务内,读取的数据都是解密后的,也就是说对客户端而言是无感知的。而这个key是本地存放的,mysql服务拥有读写这个key的权限。 总体看这种方案不太安全,原因是数据库文件是加密的,但只要能有mysql服务的账户,那么访问数据都是解密后的,加密不攻自破。而且解密key也是本地存放的,入侵者完全可以一并带走。这种方案只能保证入侵者只拖走了数据库文件后无法读取内容。 企业版MySQ…

阅读全文 »

常用hibernate注解:表关联,字段属性注解

现在主流的的ORM就属hibernate和mybatis了。两者相比之下,hibernate更加灵活,部分SQL功能可以使用丰富的注解实现,而mybatis一般都是构建原生的SQL实现的。 1.基本注解 实现hibernate的核心应该就属Entity。一个简单的JOPO,我们添加@Entity标注这是一个实体类,默认使用类名作为表名,使用字段名作为列明,一个完整的Entity类的结构就对应一张数据库中的表。 我们使用@Table(name=”newTableName”) 注解自定义表名 使用@Column(name=”newColumnName&#8221…

阅读全文 »

Spring Boot 2.0 & OAuth 2.0 客户端实现

在oauth2.0框架中,主要包含了三个角色,授权端,客户端,资源端。 授权端指的是oauth2.0的授权服务,客户端可能是浏览器,也可能是java服务,资源端是给客户端提供资源服务的. 从流程上看,客户端提供认证信息,从授权服务获取令牌,让拿着令牌到资源服务获取内容,资源服务会拿着客户端给的令牌去授权服务校验令牌的有效性,无问题则返回相应资源。 单论客户端而言,首先需要配置授权必须的配置,比如clientid,clientSecret等。 配置模板如下 client: clientId: spring-security-oauth2-read-client clientSecret: spr…

阅读全文 »

Mybits plugin& Interceptor & jsqlparse 实现多租户

上一篇文章写道了mybatis框架下自定义拦截器的基本实现。因为项目正好要做多租户的功能,所以我用这张方案实现了一下。 原本平台是基于docker实现多租户方案的,这种方案的优点是省时省力,新建一个租户基本没啥操作,一个dockerfile文件搞定,而且现在的服务商都提供了完整的配套容器服务。但缺点也能明显,每个租户都需要分配一套独立的硬件资源。N个租户意味着要开N个容器,N个数据库,N个tomcat,也有点吃不消。 目前来说,多租户大致分三种方案 1.独立数据库 2.同一个数据库,不同Schema 3.同一个数据库,同一个Schema,每张表使用tenant_id字段区分不同的租户。 个人倾…

阅读全文 »