分类 后端 中的文章

使用Mybatis Plus简单实现多租户架构

在进行多租户架构(Multi-tenancy)实现之前,先了解一下相关的定义吧: 什么是多租户 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。 简单讲:在……

阅读全文

解决Fastjson中ref重复引用问题

解决FastJson中"$ref重复引用"的问题,先来看一个例子吧: public static void main(String[] args) { UserGroup userGroup = new UserGroup().setName("UserGroup"); User user = new User("User"); for (int i = 0; i < 3; i++) { userGroup.addUser(user); } Console.log(JSON.toJSONString(userGroup)); } @Data @AllArgsConstructor static class User { private String name; } @Data @Accessors(chain = true) static class UserGroup { private String name; private List<User> users = Lists.newArrayList(); public UserGroup addUser(User user) { this.getUsers().add(user); return this; } } 输出结果: {"name":"UserGroup","users":[{"name":"User"},{"$ref":"$.users[0]"},{"$ref":"$.users[0]"}]} 上面的现象就是将user对象的引用重复使用造成了……

阅读全文

MySQL Emoji 表情字符支持

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常: java.sql.SQLException: Incorrect string value: ‘xF0x9Fx92x94’ for column ‘name’ at row 1 针……

阅读全文

Dubbo自定义Http协议返回值过滤器

公司内部的Dubbo又封装了一层,通过注解直接暴露Service接口,对外提供Http服务,在序列化返回结果时,简单粗暴的将实体的所有非空属性全部序列化出来了,接口的返回体相当庞大,很是浪费资源。 核心实现 使用FastJson的com.alibaba.fastjson.serial……

阅读全文

在SpringBoot中优雅的集成Dubbo

在springboot中集成dubbo示例(非注解),废话少说,直入正题。 pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> springboot-dubbo-example-provider application.yml server: port: 10051 dubbo: registry: address: localhost:2181 dubbo-provider.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="springboot-dubbo-example-provider"/> <dubbo:registry id="zookeeper" protocol="zookeeper" address="${dubbo.registry.address}"/> <dubbo:protocol name="dubbo" port="30001"/> <dubbo:service interface="com.wuwenze.springbootdubboexampleprovider.service.SayHelloService" ref="sayHelloService" registry="zookeeper"/> <bean id="sayHelloService" class="com.wuwenze.springbootdubboexampleprovider.service.impl.SayHelloServiceImpl"/> </beans> interface package com.wuwenze.springbootdubboexampleprovider.service; /** * @author wwz * @version 1 (2018/10/10) * @since Java7 */……

阅读全文

Java11 部分新特性一览

月26日,Java 11(LTS 长期支持版)如期而至,虽然短期很难投入生产使用(毕竟现在还在用jdk7呢,哈哈哈哈)但是还是非常有必要了解一下相关的特性的。 jshell 使用jshell可以像python交互模式那样直接运行代码 编译 && 运行 简化了javac & java命令 javac Test.java java Test #### jdk 11 java Test.java 局部类型……

阅读全文

当当网Dubbox框架使用示例

Dubbox是当当网基于阿里巴巴dubbo衍生出来的一个新版本,以下是在官网摘抄的相关特性: 支持REST风格远程调用(HTTP + JSON/XML) 支持基于Jackson的JSON序列化 支持基于嵌入式Tomcat的HTTP remoting体系 升级ZooKeeper客户端:将dubbo中的zooke……

阅读全文

Spring @Cacheable 注解相关说明

关于@Cacheable注解的作用不做过多说明,文本主要针对该注解的key自定义策略规则提供一些示例。 @Cacheable 属性名 必填? 描述 value 必填 缓存的命名空间 key 可选 指定一个唯一的key(在缓存命名空间中),使用SpEL表达式 condition 可选 限定条件,哪种情况使用缓存,使用SpEL表达式 unless 可选 限定条件,哪种情……

阅读全文

Java代码精简神器Lombok的使用

Java 代码中有很多冗余、臃肿的代码(如:Getter/Setter、构造方法、hashCode 方法等)lombok 是一款 IDE 插件,其专注于消除此类代码,以达到代码简洁高效的目的。它同时提供了 IDEA 以及 Eclipse 相关的插件,本文以 IDEA 为例,做一些相关的示例 准备工作 1)IDEA 中安装相关的插件,如图: 2……

阅读全文

使用Maven打包可执行JAR包

SpringBoot工程 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.wuwneze.springbootexample.SpringbootExampleApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> 普通Java工程 <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.wuwenze.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> 使用该插件生成的jar包,带jar-with-dependencies后缀的jar文件,可以直接运行。 如何打包 mvn clean install package 题外话:如何让linux命令保持后台运行? nohup java -jar test-0.0.1-SNAPSHOT-jar-with-dependencies.jar……

阅读全文