Java

springboot 事务例子(单机)

Submitted by Lizhe on Fri, 07/28/2017 - 15:20

注意以下几点

  1. @Transactional 可以写在类上也可以写在方法上
  2. @Transactional写在方法上时必须是public方法,而且最好有接口, 没有接口的事务可能会失效
  3. 默认是只有runtime exception才回滚,所以需要rollbackFor={Exception.class, RuntimeException.class}

 

/springbootTransactionSample/pom.xml

Spring Session ( by tomcat directly )

Submitted by Lizhe on Tue, 07/25/2017 - 10:13

换成tomcat下工作的版本需要

添加一个filter在web.xml里

pom.xml的依赖需要一些改动,其他都差不多

这里唯一需要稍微解释一下的是filter使用的springSessionRepositoryFilter, 这个对象的名字是约定的,也就是说没有特殊需要不要随意修改

另外这个对象是@EnableRedisHttpSession标签自动生成的,如果移除标签,会得到找不到springSessionRepositoryFilter对象的错误 ( 又是一个找不到对象的错误 :P )

/springsessionsampletomcat/pom.xml

Spring Session ( by spring boot )

Submitted by Lizhe on Mon, 07/24/2017 - 14:09

以前做tomcat集群的时候你一定处理过session共享的问题

原理一般都是使用memcached和redis当做缓存,然后把session数据直接存进去

做法是使用一个特定的memcached或者redis的session管理器, 一般来说这个管理器只能在特定的容器中使用

也就是说存储媒介是memcached或者redis, 实现是通过session管理器

spring session 其实也差不多, 也是把session存进memcached或者redis, 只不过它是通过一个filter来实现的

不过在springboot下你根本不用写filter, 只写注释就可以了

pom.xml

Java 编码安全 (1) 如何比较数组

Submitted by Lizhe on Wed, 07/19/2017 - 12:07

先看下面的代码

int[] a = new int[10];
 int[] b = new int[10];
        
System.out.println(a==b);

上面代码会直接打印出 false , 正常来讲初始化的int数组值应该都是0 , 那为什么两个数组不相等呢

rootcause在于, 数组并不会重写Object.equals() 方法, 而原始的equals方法比较的是引用

两个数组的引用不同, 自然结果是false 

正确的做法应该是使用Arrays.equals(a,b)

import java.util.Arrays;

Springcloud 应用(7) 路由(route)

Submitted by Lizhe on Sat, 07/08/2017 - 23:17

要使用路由的话需要添加一个新的路由服务

别害怕,这东西甚至连个java controller都没有

如果仅仅是使用url路由器的话加入下面的依赖就好了

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>

如果需要service id路由器的话, 还有加上

Springcloud 应用(4) 服务负载均衡

Submitted by Lizhe on Fri, 07/07/2017 - 16:04

为了在原有例子中添加一个helloworld服务的负载, 需要新建2个类

  • helloworld服务的一个拷贝
  • client服务, 用于请求这两个负载

 

对于服务拷贝来说, 其实只要修改一下端口, 只要端口不冲突启动两个实例就好了, 两个实例的其他内容一模一样, 都注册给同一个注册中心

你也可以像我一样, 直接复制一个project, eclipse里启动方便一些

然后我们来构建client服务

/springcloudsample_client/pom.xml