license 是软件的授权许可。 对于开源软件来说,虽然别人可以用,但是用的时候希望别人遵循一些要求,比如,使用时必须标明原作者是谁、可以做怎样的修改、软件被用作不正规用途原作者是否要负责……这些其实就是一个协议。 对于作者来说,自己为开源代码写符合法律条规的繁冗的 license 太麻烦,所以就可以采用广为流传的开源协议(eg. MIT, CC…),在 license 文件中标明 “Licnse under the MIT license” 快速选择 详细的协议选择可以从 github choose license 项目中选。下边列些常用的(参见 如何为你的代码选择一个开源协议) MIT 协议 宽松但覆盖一般要点。此协议允许别人以任何方式使用你的代码同时署名原作者,但原作者不承担代码使用后的风险,当然也没有技术支持的义务。jQuery和Rails就是MIT协议 apache 协议 作品涉及到专利,可以考虑这个。也比较宽松,但考虑了专利,简单指明了作品归属者对用户专利上的一些授权(我的理解是软件作品中含有专利,但它授权你可以免费使用)。Apache服务器,SVN还有NuGet等是使用的Apache协议。 GPL 对作品的传播和修改有约束的,可以使用这个。GPL(V2或V3)是一种版本自由的协议(可以参照copy right来理解,后者是版本保留,那copyleft便是
Read more »

可选 lib * apache POI:java 中最大众的 ,支持 xls、xlsx,提供接口来创建、读写 excel文件。 * apache openOffice uno: * JExcel app:这个功能强大,什么都可以做,但是可能收费,而且仅基于 windows + installed excel * JExcelAPI:轻量更易用,但似乎仅支持 xls,而且不支持复杂的 range、formular 计算操作。 * javascript 版本的 JExcel * docx4j:其中 xlsx4j 是处理 excel 的,不过看起来功能比较简单。 * microsoft excel VBA:vba 是微软写的操作 office 软件的语言。所以可以利用这个 vba 写代码…… ref doc: * baeldung example for apache POI & JExcelAPI * Mkyong example for JExcelAPI 核心操作支持 libapache poiapache openofficeJExcelAPIread/create excel file✔️可以✔️read/write excel cells1. 获取 sheet,遍历 row,遍历 row cells;可以1. 获取 sheet,可以根据 cell 行列
Read more »

hikariCP 是一个轻量级的数据库连接池。引用 数据库连接池性能对比 的说法(我并没有测试过): 1. 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。 2. druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。 3. 综合性能,扩展性等方面,可考虑使用druid或者hikariCP连接池。 4. 可开启prepareStatement缓存,对性能会有大概20%的提升。 在使用 spring jpa 时,默认使用的连接池是 hikariCP,所以最终采用了这个连接池。 使用过程中出现了一些坑,总结一下。 java.sql.SQLTransientConnectionException 仅使用默认配置,在运行所有测试时,会出现如下异常信息: 这是因为默认的连接池数量是 10,而并行运行测试时,连接池数量不够了。通过设置 maximumPoolSize 解决。 1 spring.datasource.hikari.maximum-pool-size:1000 too many connections 在进行上述设置后,启动应用,连接数据库,发现数据库无法连接,报 too many connections。 fixed-size poo
Read more »

bean validator 主要是验证一个 bean 的各字段是否满足一些约束,例如 @NotNull bean validation 有个规范 jsr 380,里边定义了一堆 api。有很多规范的实现,最常用的是 hibernate validator,jersey 出的 jersey-bean-validation 也是基于 hibernate validator 做的。 bean validator 一般是应用在 web 框架(如 spring、jersey)上,框架在反序列化 rest 请求到 bean 对象时,框架会调用 validator 根据 bean 对象的 annotation 对 bean 进行验证。 这个过程也可以手动进行。可参考 hibernate validator: get started。 引入依赖 1 2 3 4 5 6 7 8 // jsr 380 api compile "javax.validation:validation-api:2.0.1.Final" // hibernate vaidator 实现 testCompile "org.hibernate.validator:hibernate-validator:6.0.10.Final" // hibernate validator 依赖的 JSR 341 实现 te
Read more »

泛型 java 泛型存在类型擦除(参见 java 泛型) 1 2 3 4 List l1 = new ArrayList(); List l2 = new ArrayList(); System.out.println(l1.getClass() == l2.getClass()); // return true, 两个都是 List.class 获取运行时泛型类型 类型擦除使得根据类定义获取 runtime 泛型类型是不可能的,一般有几种方法(参见 stackoverflow): 1. 根据类对象实例获取,可参见 handle java generic types with reflection * eg. Class tClass = (Class) ReflectionUtil.getClass(ReflectionUtil.getParameterizedTypes(this)[0]); 2. 从父类中获取(要求父类有相同的泛型参数) * eg. Class tClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments
Read more »

使用 aws serverless java container 实现。 使用 aws cli 创建项目,配置 aws cli 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 利用原型创建项目 $ mvn archetype:generate -DgroupId=my.service -DartifactId=my-service -Dversion=1.0-SNAPSHOT \ -DarchetypeGroupId=com.amazonaws.serverless.archetypes \ -DarchetypeArtifactId=aws-serverless-jersey-archetype \ -DarchetypeVersion=1.1.3 # 安装 aws cli $ pip install awscli # 配置 credentials $ aws configure AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-west-
Read more »

1. 最基本的js写法是:不管是要调用项目内或项目外的其他文件的方法,都是直接在当前文件中调用,然后在web文件(html)中利用