标签归档:java

springBoot数据库连接池常用配置

在配置文件中添加配置如下(这里使用的是多数据源):

spring.datasource.primary.url=jdbc\:mysql\://localhost\:3306/test?useUnicode\=true&characterEncoding\=utf-8
spring.datasource.primary.username=test
spring.datasource.primary.password=123456
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
#验证连接的有效性
spring.datasource.primary.test-while-idle=true
#获取连接时候验证,会影响性能
spring.datasource.primary.test-on-borrow=false
#在连接归还到连接池时是否测试该连接
spring.datasource.primary.test-on-return=false
spring.datasource.primary.validation-query=SELECT 1 FROM DUAL
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
read more

Java加密技术 之 DH

DH
Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成”一致”的、可以共享的密钥。换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。

流程分析:

1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。
2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。

通过java代码实现如下:
Java代码

import java.security.Key; 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PublicKey; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 
import java.util.HashMap; 
import java.util.Map; 
 
import javax.crypto.Cipher; 
import javax.crypto.KeyAgreement; 
import javax.crypto.SecretKey; 
import javax.crypto.interfaces.DHPrivateKey; 
import javax.crypto.interfaces.DHPublicKey; 
import javax.crypto.spec.DHParameterSpec; 
 
/** 
 * DH安全编码组件 
 */ 
public abstract class DHCoder extends Coder { 
 public static final String ALGORITHM = "DH"; 
 
 /** 
 * 默认密钥字节数 
 * 
 * <pre>
read more

Java jdbc调用Oracle数据库存储过程

一、了解CallableStatement接口

1.callablestatement接口提供了两种调用形式

{?= call <procedure-name>[(<arg1>,<arg2>, …)]} //包含结果参数的调用形式 如:函数(funciton)
{call <procedure-name>[(<arg1>,<arg2>, …)]} //不包含结果参数的调用形式 如:存储过程(procedure)

2.callablestatement接口提供的方法

void registerOutParameter(int parameterIndex, int sqlType)
 throws SQLException; //在调用存储过程的时候设置输出参数的类型,用于接收输出结果

registerOutParameter接口中有四个该方法的重载实现,具体的可以查看源码了解

setXXX(int parameterIndex,XXX x) //主要用于设置过程调用时候需要的输入参数信息  其中XXX代表对应类型

getXXX(int x) //主要用于获取过程调用后返回的参数的信息

3.callablestatement接口产生的异常提示

/*
 * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
 * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>, 
 * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>, 
 * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
 * <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
 * or <code>STRUCT</code> data type and the JDBC driver does not support
read more

java的System.getProperty()方法可以获取的值

java.version Java 运行时环境版本
java.vendor Java 运行时环境供应商
java.vendor.url Java 供应商的 URL
java.home Java 安装目录
java.vm.specification.version Java 虚拟机规范版本
java.vm.specification.vendor Java 虚拟机规范供应商
java.vm.specification.name Java 虚拟机规范名称
java.vm.version Java 虚拟机实现版本
java.vm.vendor Java 虚拟机实现供应商
java.vm.name Java 虚拟机实现名称
java.specification.version Java 运行时环境规范版本
java.specification.vendor Java 运行时环境规范供应商
java.specification.name Java 运行时环境规范名称
java.class.version Java 类格式版本号
java.class.path Java 类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是“/”)
path.separator 路径分隔符(在 UNIX 系统中是“:”)
line.separator 行分隔符(在 UNIX 系统中是“/n”)
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录

获取的代码示例:

public class SystemProperty {
	public static void main(String args[]) {   
    System.out.println("java_vendor:" + System.getProperty("java.vendor"));   
    System.out.println("java_vendor_url:"   
             + System.getProperty("java.vendor.url"));   
    System.out.println("java_home:" + System.getProperty("java.home"));   
    System.out.println("java_class_version:"   
             + System.getProperty("java.class.version"));   
    System.out.println("java_class_path:"   
            + System.getProperty("java.class.path"));   
    System.out.println("os_name:" + System.getProperty("os.name"));   
    System.out.println("os_arch:" + System.getProperty("os.arch"));   
    System.out.println("os_version:" + System.getProperty("os.version"));   
    System.out.println("user_name:"
read more