@big-bear
2017-12-15T03:32:44.000000Z
字数 14068
阅读 1056
Java
我的征途是全栈
for (Map.Entry<String, Object> entry : param.entrySet()) {
Boolean buildSuccess = ElasticSearchUtil.addJsonProperty(json, entry);
if (!buildSuccess) {
LOGGER.error("不支持" + entry.getKey() + "字段的相关类型:" + entry.getValue().getClass().toString());
return false;
}
}
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时
DateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时
//date to string
String time=format.format(date);
//string to date
Date date = format.parse(szBeginTime);
//两个时间比较大小
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(comDate);
c2.setTime(creDate);
System.out.println(c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH));
//date比较大小
date1.compareTo(date2) //返回值0,1,-1:date1>date2返回1
//获取Date类型中的年份;(DateTime为JodaTime)
String graduateYear = new Integer(new DateTime(date).getYear()).toString();
Cron表达式范例:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
<!--配置quartz定时任务 -->
<!-- ①配置调度的任务对应bean的id和自定义class-->
<bean id="leaderListener" class="com.srtc.quartz.LeaderListener">
<property name="userSrv" ref="sec_userSrv" />
</bean>
<!-- ②配置调度任务对应的bean的id和执行的方法,作业不并发调度-->
<bean id="myTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="leaderListener" />
<property name="targetMethod" value="linstenLeader" />
</bean>
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="myTask" />
<property name="cronExpression">
<!-- 每十分钟执行任务调度 -->
<value>* */10 * * * ?</value>
</property>
</bean>
<!-- ④Quartz的调度工厂,调度工厂只能有一个,多个调度任务在list中添加 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 所有的调度列表-->
<ref bean="myTrigger" />
<!-- <ref bean="myTrigger1" />
<ref bean="myTrigger2" />
对应的bean配置:id="myDetail1" 和 id="myTrigger1" 可以对应多配置
-->
</list>
</property>
</bean>
防止job并行运行的几种解决方案:
一、JOB State 在通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个concurrent属性,表示job是否可以并行运行:如果一个job的业务处理发费的时间超过了job的启动的间隔时间(repeatInterval),这个属性非常有用。如果为false,那么,在这种情况下,当前job还在运行,那么下一个job只能延时运行。如果为true,那么job就会并行运行。在实际的应用中应该配置为true/false,要根据需要了(废话)。
二、如果通过继承QuartzJobBean实现job的话,默认情况下QuartzJobBean是implements org.quartz.Job接口的,也就是说job示例是stateless的,会出现前面所述的并行情况。而代码中却要求job任务必需串行,解决办法:在job子类中继续implements org.quartz.StatefulJob。那么这个job实例变成了Stateful,job任务也就是串行的了。 注: 在Quartz中,如果实现org.quartz.Job接口,那么这个job是stateless的,job实例的参数不能在多个任务之间共享,如果实现org.quartz.StatefulJob,这个job是个单例的,job实例的属性可以从当前任务传递到下一个任务。
String studentIdStrs[] = this.ids.split(",");
String[] arr = new String[] {"1", "2"};
List list = Arrays.asList(arr);
List list = new ArrayList();
list.add("1");
list.add("2");
final int size = list.size();
String[] arr = (String[])list.toArray(new String[size]);
Object[] dataObjects = new Object[objects.length - 1];
System.arraycopy(objects, 1, dataObjects, 0, dataObjects.length);
system.arraycopy()方法的解释
其函数原型是: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src:源数组; srcPos:源数组要复制的起始位置; dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度
AAAA a = new AAAA();
string aaa = new Gson().toJson(a);
http://blog.csdn.net/tianlincao/article/details/5654880
String factoryName = new String(request.getParameter("factoryName").getBytes("ISO-8859-1"), "utf-8");
这个问题也可以通过修改tomcat的默认传参编码来解决
<Connector port="8000" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
tomcat的默认编码是ISO-8859-1 ,所以产生了中文乱码问题
/**
* 判断是否是ajax请求. <br/>
*
* @author ghlin
* @return
*/
public boolean isAjaxRequest() {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equalsIgnoreCase(header))
return true;
else
return false;
}
private String[] getFiledName(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getType());
fieldNames[i] = fields[i].getName();
}
return fieldNames;
}
package com.wisdombud.alumnimanage.web.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 功能: 比较属性值注解.<br/>
* date: 2016年9月14日 下午5:37:35 <br/>
*
* @author zlliu
* @version
* @since JDK 1.7
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD })
public @interface ContrastValue {
/**
* 功能: 属性中文名称.<br/>
* date: 2016年9月14日 下午5:42:51 <br/>
*
* @author zlliu
* @return
*/
String zhName();
}
Field[] fields = newPojo.getClass().getDeclaredFields();//newPojo为字段加了注解的类的实例化对象
try {
for (int j = 0; j < fields.length; j++) {
ContrastValue meta = fields[j].getAnnotation(ContrastValue.class);
Method getMethod = newPojo.getClass().getMethod("get" + name);
}
}
在向下转型过程中,分为两种情况:
情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误
public class Girl {
public void smile(){
System.out.println("girl smile()...");
}
}
class MMGirl extends Girl{
@Override
public void smile() {
System.out.println("MMirl smile sounds sweet...");
}
public void c(){
System.out.println("MMirl c()...");
}
}
class main{
public static void main(String[] args) {
Girl g1=new MMGirl(); //向上转型
g1.smile();
MMGirl mmg=(MMGirl)g1; //向下转型,编译和运行皆不会出错
mmg.smile();
mmg.c();
Girl g2=new Girl();
//MMGirl mmg1=(MMGirl)g2; //不安全的向下转型,编译无错但会运行会出错
//mmg1.smile();
//mmg1.c();
if(g2 instanceof MMGirl){
MMGirl mmg1=(MMGirl)g2;
mmg1.smile();
mmg1.c();
}
}
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class BaseCrudServiceImpl<T extends BaseDataEntity> extends AbstractService<T> implements BaseCrudService<T> {
@PersistenceContext
private EntityManager em;
private Class<T> entityClass;
public BaseCrudServiceImpl() {//在构造方法时初始化entity
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass = (Class) params[0];
}
关于初始化时候的异常解决方案子类继承的时候需要传给父类一个确切的类型,而依旧传递一个T
Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。
按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。
public static String captureName(String name) {
// name = name.substring(0, 1).toUpperCase() + name.substring(1);
// return name;
char[] cs=name.toCharArray();
cs[0]-=32;
return String.valueOf(cs);
}
当然还有~
StringUtils.capitalize(kathValue.getType())//Apache的包~
ExecutorService pool = Executors.newFixedThreadPool(tenants.size());
for (Tenant tenant : tenants) {
pool.submit(new Runnable() {
@Override
public void run() {
// sysTenantData(tenant);
System.out.println("我要好好学习");
}
});
}
pool.shutdown();
父类静态变量——父类静态代码块——子类静态代码块——父类非静态变量——父类非静态代码块——父类构造函数——子类非静态变量——子类非静态代码块——子类构造函数
只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。
形象地:自身实例或子类实例 instanceof 自身类 返回true
String s=new String("javaisland");
System.out.println(s instanceof String); //true
obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。这个方法是instanceof运算符的动态等价。
形象地:自身类.class.isInstance(自身实例或子类实例) 返回true
String s=new String("javaisland");
System.out.println(String.class.isInstance(s)); //true
如果调用这个方法的class或接口 与 参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。
形象地:自身类.class.isAssignableFrom(自身类或子类.class) 返回true
System.out.println(ArrayList.class.isAssignableFrom(Object.class)); //false
System.out.println(Object.class.isAssignableFrom(ArrayList.class)); //true
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
select job From BaseJob job inner join job.domains as domain where domain.id != null
po的写法,
package com.wisdombud.career.pojo;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "dic_enum")
@NamedQueries({ @NamedQuery(name = "DicEnum.findAll", query = "SELECT d FROM DicEnum d") })//主要区别在这里
public class DicEnum implements Serializable {
public DicEnum() {
}
private String code;
private String value;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
调用方法如下
public List<DicEnum> findAllDicEnums() {
final Query query = super.getSession().getNamedQuery("DicEnum.findAll");
return query.list();
}
public void page(PageEntity<BaseJob> entitys, Map<String, Object> parms) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT b.name, b.id,b.job,i.cn_name as cnName,b.work_area as workArea,b.end_time as endTime");
sql.append(" FROM base_jobs b LEFT JOIN base_io i ON (b.base_io_id = i.id)");
sql.append(" WHERE 1 = 1");
buildParm(sql, parms);
sql.append(" order by b.create_time desc");
pageBySql(sql.toString(), entitys, new QueryExtension<BaseJob>() {
@Override
public void doExtend(final SQLQuery sq) {
sq.addEntity("name");
sq.addScalar("id");
sq.addScalar("job");
sq.addScalar("cnName");
sq.addScalar("workArea");
sq.addScalar("endTime");
sq.setResultTransformer(Transformers.aliasToBean(BaseJob.class));
}
}, parms);
}
@GsonNotSerialize
private List<SecRolePojo> rolePojos;
@Transient
private Integer memberNum;
级联(Cascade) : 二个以上的设备通过某种方式连接起来,能起到扩容的效果就是级联。Hibernate级联(Cascade)是用来说明数据库中两个表之间相互关系(一对一,一对多,多对多)中,当对主对象进行某种操作时,是否对其关联的从对象也作类似的操作(比如有对象Department和Employee,它们之间是一对多的关系,当保存Department时,其对应的Employee是否也相应的保存),常见的级联(Cascade)有:
(1)none:在保存,删除或修改当前对象时,不对其附属对象(关联对象)进行级联操作。它是默认值。
(2)save-update:在保存,更新当前对象时,级联保存,更新附属对象(临时对象,游离对象)。
(3)delete:在删除当前对象时,级联删除附属对象。
(4)all:所有情况下均进行级联操作,即包含save-update和delete等等操作。
(5)delete-orphan:删除此对象的同时删除与当前对象解除关系的孤儿对象(仅仅使用于一对多关联关系中)。
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="alumni_assoc_member",
joinColumns=@JoinColumn(name="ASSOC_ID"),
inverseJoinColumns=@JoinColumn(name="ALUMNI_ID"))
private Set<AlumniInfoPojo> alumnis;
@ManyToMany(cascade=CascadeType.ALL, mappedBy="alumnis")
private Set<BranchPojo> branchs;
insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
name属性定义了被标注字段在数据库表中所对应字段的名称;
unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
nullable属性表示该字段是否可以为null值,默认为true。
columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
table属性定义了包含当前字段的表名。
length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。
@NotFound(action = NotFoundAction.IGNORE)
使用hibernate 注解配置实体类的关联关系,在many-to-one,one-to-one关联中,一边引用自另一边的属性,如果属性值为某某的数据在数据库不存在了,hibernate默认会抛出异常。解决此问题,加上如下注解就可以了:
@NotFound(action=NotFoundAction.IGNORE),意思是找不到引用的外键数据时忽略,NotFound默认是exception
原文博客
@ManyToOne
@JoinColumn(name = "parentid", nullable = true, foreignKey = @ForeignKey(name = "null"))
@NotFound(action = NotFoundAction.IGNORE)
public Department getParent() {
return parent;
}
<s:if test="transferringStudentInfoVo.attachment!=null&&!''.equals(transferringStudentInfoVo.attachment)">
<img id="photo" src="${contextPath}/${transferringStudentInfoVo.attachment}"/>
</s:if>
<s:set var="map" value="#{0:'审核中',1:'审核通过',2:'审核未通过',3:'驳回'}"></s:set>
<build>
<finalName>cloud_talk_web</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>//jdk版本
<target>1.8</target>//jdk版本
</configuration>
</plugin>
</plugins>
</build>
<dependency>
<groupId>org.apache</groupId>
<artifactId>test</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/paypal_base.jar</systemPath>
</dependency>
groupId和artifactId随便填写下
${basedir}变量可以直接使用
如果是多个包的话
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
<!--这里引入一下-->
<compilerArguments>
<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
<!--对long类型加密成字符串 -->
<dependency>
<groupId>org.hashids</groupId>
<artifactId>hashids</artifactId>
<version>1.0.1</version>
</dependency>
<!--更和谐的时间加减操作-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.xuwei-k/html2image -->
<!--网页转图片 对css支持不太好,尽量使用css标签-->
<dependency>
<groupId>com.github.xuwei-k</groupId>
<artifactId>html2image</artifactId>
<version>0.1.0</version>
</dependency>
<!--更简洁的collection操作 -->
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
</dependency>
<!--java操作串口操作 -->
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtx</artifactId>
<version>2.2pre2</version>
</dependency>
@Result(name = "home", type = "redirect", location = "/home")
spring完成bean注入后执行的初始化方法,@postContruct注解的方法在构造方法执行以后执行初始化;
@PostConstruct
public void init() {
dslJpaService.setEntityClass(CommonExcel.class);
}
注解@PostConstruct与@PreDestroy讲解及实例
<configuration>
<settings>
……
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
</configuration>
findByIds(List<Long> ids)
xml配置
<select id="findByIdsMap" resultMap="BaseResultMap">
Select
<include refid="Base_Column_List" />
from jria where ID in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
findByIds(Long[] ids)
xml
<select id="findByIdsMap" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from jria where ID in
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{item}
</foreach>
</select>
更多信息见mybatis中使用in查询时的注意事项