spring-boot配置属性字典-database

datasource

  • spring.dao.exceptiontranslation.enabled: 是否开启PersistenceExceptionTranslationPostProcessor,默认为true
  • spring.datasource.abandon-when-percentage-full: 设定超时被废弃的连接占到多少比例时要被关闭或上报
  • spring.datasource.allow-pool-suspension: 使用Hikari pool时,是否允许连接池暂停,默认为: false
  • spring.datasource.alternate-username-allowed: 是否允许替代的用户名
  • spring.datasource.auto-commit: 指定updates是否自动提交
  • spring.datasource.catalog: 指定默认的catalog
  • spring.datasource.commit-on-return: 设置当连接被归还时,是否要提交所有还未完成的事务
  • spring.datasource.connection-init-sql: 指定连接被创建,再被添加到连接池之前执行的sql
  • spring.datasource.connection-init-sqls: 使用DBCP connection pool时,指定初始化时要执行的sql
  • spring.datasource.connection-properties.[key]: 在使用DBCP connection pool时指定要配置的属性
  • spring.datasource.connection-test-query: 指定校验连接合法性执行的sql语句
  • spring.datasource.connection-timeout: 指定连接的超时时间,毫秒单位
  • spring.datasource.continue-on-error: 在初始化数据库时,遇到错误是否继续,默认false
  • spring.datasource.data: 指定Data (DML)脚本

Read More

spring-boot配置属性字典-server

server配置

  • server.address: 指定server绑定的地址
  • server.port: 设定http监听端口
  • server.context-path: 设定应用的context-path
  • server.context-parameters.[param name]: 设置servlet context 参数
  • server.display-name: 设定应用的展示名称,默认: application
  • server.servlet-path: 设定dispatcher servlet的监听路径,默认为: /
  • server.compression.enabled: 是否开启压缩,默认为false
  • server.compression.excluded-user-agents: 指定不压缩的user-agent,多个以逗号分隔,默认值为:text/html,text/xml,text/plain,text/css
  • server.compression.mime-types: 指定要压缩的MIME type,多个以逗号分隔
  • server.compression.min-response-size: 执行压缩的阈值,默认为2048
  • server.jsp-servlet.class-name: 设定编译JSP用的servlet,默认: org.apache.jasper.servlet.JspServlet
  • server.jsp-servlet.init-parameters.[param name]: 设置JSP servlet 初始化参数.
  • server.jsp-servlet.registered: 设定JSP servlet是否注册到内嵌的servlet容器,默认true

Read More

spring-boot配置属性字典-mvc

multipart

  • multipart.enabled: 是否开启文件上传支持,默认为true
  • multipart.file-size-threshold: 设定文件写入磁盘的阈值,单位为MB或KB,默认为0
  • multipart.location: 指定文件上传路径
  • multipart.max-file-size: 指定文件大小最大值,默认1MB
  • multipart.max-request-size: 指定每次请求的最大值,默认为10MB

messages

  • spring.messages.basename: 指定message的basename,多个以逗号分隔,如果不加包名的话,默认从classpath路径开始,默认: messages
  • spring.messages.cache-seconds: 设定加载的资源文件缓存失效时间,-1的话为永不过期,默认为-1
  • spring.messages.encoding: 设定Message bundles的编码,默认: UTF-8

Read More

hexo域名和github绑定

  1. 购买域名

  2. DNSpod注册账号

  3. 修改域名下的DNS服务器,修改为

    1
    2
    f1g1ns1.dnspod.net
    f1g1ns2.dnspod.net
  4. DNSpod添加域名,添加设置,如下图

  5. 在hexo的source文件夹里创建CNAME文件,文件内容为你的域名信息,如:josephwlf.com

断路器模式

这是常见的软件系统以使软件在不同的进程中运行,有可能在网络上不同的机器上调用。

内存调用和远程调用之间的一个巨大差异是远程调用可能会失败,或者加载一个没有反应,直到达到一定的超时限制。

更糟糕的是,如果你有一个无响应的供应商很多请求,那么你就会运行光关键资源造成多个系统间的级联故障的。

在他的优秀著作Release It,Michael Nygard推广断路器模式以防止这种灾难性的级联。



断路器背后的基本思想非常简单。你在一个断路器对象中封装一个protected方法调用,它监视故障保护功能调用。

一旦故障达到一定阈值时,断路器跳闸,并且所有进一步的调用到达断路器后返回一个错误,没有保护的调用将继续执行。

通常你还需要某种形式的监控警报如果断路器跳闸了。

Read More

squirrel sql笔记

配置Drivers

选定指定的drivers点击修改操作,在Extra Class Path中指定对应的jar驱动文件

连接对应的数据库

选定对应的driver,输入对应的url、账户和密码,连接即可。

例:

1
2
url:jdbc:h2:tcp://localhost:9999/mem:dev
密码:sa

spring security笔记

登录核心

AbstractUserDetailsAuthenticationProvider类的authenticate方法

配置文件定义用户名和密码原理

初始化过程

  1. SecurityProperties创建security默认配置项数据,yml中如果有,会覆盖对应项的值
  2. 启动时,首先执行AuthenticationManagerConfiguration类的静态内部类DefaultInMemoryUserDetailsManagerConfigurer初始化方法configure方法,读取securityProperties中的用户信息
  3. AuthenticationManagerConfiguration调用父类UserDetailsManagerConfigurerwithUser方法将securityProperties中的用户信息添加到UserDetailsManagerConfigureruserBuilders对象
  4. UserDetailsManagerConfigurer的初始化方法initUserDetailsService方法调用InMemoryUserDetailsManagercreateUser方法将userBuilders对象添加到InMemoryUserDetailsManagerusers对象中

登录过程

执行方法:AbstractUserDetailsAuthenticationProviderauthenticate方法

  1. 现在usercache中查询是否有传入的username对应的user对象
    • 如果缓存中没有执行
      1. 调用DaoAuthenticationProviderretrieveUser方法
      2. 主要通过retrieveUser方法中的loadUserByUsername方法取得user对象,因为是配置文件定义的用户名和密码,所以loadUserByUsername方法由InMemoryUserDetailsManager提供实现,在users中查找
      3. InMemoryUserDetailsManagerloadUserByUsername方法就是从InMemoryUserDetailsManager的的users对象中获取username对应的user对象
    • 如果缓存中有,则继续执行
  2. AbstractUserDetailsAuthenticationProvider的内部类DefaultPreAuthenticationChecks校验user

    1. isAccountNonLocked:判断用户是否被锁,如果被锁抛异常
    2. isEnabled:判断用户是否被禁用,如果被禁用抛异常
    3. isAccountNonExpired:判断用户是否过期,如果过期抛异常
  3. 调用DaoAuthenticationProvider类的additionalAuthenticationChecks方法,校验密码

  4. AbstractUserDetailsAuthenticationProvider的内部类DefaultPostAuthenticationChecks校验user

    1. isCredentialsNonExpired:判断用户的认证(密码)是否过期,如果过期抛异常
  5. 缓存如果不存在,则将用户添加到缓存中

  6. 调用createSuccessAuthentication方法,将用户状态设置为登录成功状态

各个类的位置

spring-security-corejar包

AbstractUserDetailsAuthenticationProvider:org.springframework.security.authentication.dao

spring-boot-autoconfigure包

SecurityProperties:org.springframework.boot.autoconfigure.security
AuthenticationManagerConfiguration:org.springframework.boot.autoconfigure.security

spring-security-config包

UserDetailsManagerConfigurer:org.springframework.security.config.annotation.authentication.configurers.provisioning

spring-security-core包

DaoAuthenticationProvider: org.springframework.security.authentication.dao
InMemoryUserDetailsManager:org.springframework.security.provisioning

linux配置ssh笔记

安装ssh服务

1
2
$ sudo apt-get update
$ sudo apt-get install openssh-server

查看ssh服务是否启动

1
$ sudo ps -e |grep ssh

支持root用户登录

修改/etc/ssh/sshd_config文件,

1. 添加`PermitRootLogin yes`
2. 如果存在`PermitRootLogin`配置项, 将其注释掉

设置禁用密码登陆

修改/etc/ssh/sshd_config文件,

1. `PasswordAuthentication`配置项设置为`no`
2. 解开`AuthorizedKeysFile      %h/.ssh/authorized_keys`的注释

重启ssh服务

1
2
3
$ /etc/init.d/ssh restart
$ service ssh restart

添加公钥

  • 在对应的用户文件夹下的.ssh文件夹内的authorized_keys文件中添加公钥.如果.ssh文件夹或者authorized_keys文件不存在, 手动添加(如果是手动添加的文件需要改文件权限, 执行命令: chmod 600 authorized_keys)
  • ssh-copy-id [用户名]@[机器地址]