異常捕獲
service捕獲業(yè)務(wù)異常,自定義BaseException;
interface捕獲業(yè)務(wù)異常,以及其他異常,用Exception“兜底”。參數(shù)校驗
不要覺得別人的代碼多可靠,該有的校驗要有;“不該有的校驗”也要有。
考慮因素全面,邏輯嚴(yán)謹(jǐn)。
記錄的唯一性可以用唯一索引保證。
alter table table_name add unique key key_name (column1_name ,column2_name);少用int
在需要數(shù)據(jù)轉(zhuǎn)換的場景,如VO轉(zhuǎn)為DTO,DTO最好用基礎(chǔ)數(shù)據(jù)類型的包裝類。
如果VO用了Integer,而Dto對應(yīng)類型是int,當(dāng)VO的Integer為null時,為Dto相應(yīng)屬性賦值會有問題。
// VO的Integer age
vo.age = null;
// Dto的int age
// ... 下面這行有問題
dto.setAge(vo.getAge());
這里涉及到拆箱問題,通過javap -c 反編譯class文件,可看到調(diào)用了Integer.intValue()。針對dto.setAge(vo.getAge());會執(zhí)行vo.getAge(),因為vo.age = null; null.intValue()會報空指針異常。
- dubbo接口使用方式
- 1)用dubbo注解
自動化配置 @EnableDubboConfiguration
consumer的注解 @DubboConsumer
producer的注解 @Service(import com.alibaba.dubbo.config.annotation.Service)
參考 http://www.itdecent.cn/p/06bfa92f2e20
- 2)不用Dubbo注解
consumer:
@Bean("ConsumerInterface")
public ReferenceBean<ConsumerInterface> consumerInterface() {
ReferenceBean<ConsumerInterface> referenceBean = new ReferenceBean<>();
referenceBean.setInterface(ConsumerInterface.class);
referenceBean.setCheck(false);
referenceBean.setVersion("1.0.0");
referenceBean.setTimeout(5000);
return referenceBean;
}
producer:
@Resource
private ProducerInterface producerInterfaceImpl;
@Bean
public ServiceBean<ProducerInterface> producerInterface() {
ServiceBean<ProducerInterface> serviceBean = new ServiceBean<>();
serviceBean.setInterface(ProducerInterface.class);
serviceBean.setRef(producerInterfaceImpl);
referenceBean.setVersion("1.0.0");
referenceBean.setTimeout(5000);
return serviceBean;
}
- 不要直接使用線程
阿里巴巴Java開發(fā)手冊:
使用線程池的好處是減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷,解決資源不足的問題。如果不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量同類線程而導(dǎo)致消耗完內(nèi)存或者“過度切換”的問題。
線程池不允許使用Executors去創(chuàng)建,而是通過ThreadPoolExecutor的方式,避資源耗盡風(fēng)險。 Executors返回的線程池對象的弊端如下 :
1)FixedThreadPool和SingleThreadPool: 允許的請求隊列長度為 Integer.MAX_VALUE,可能會堆積大量的請求,從而導(dǎo)致 OOM。
2)CachedThreadPool 和 ScheduledThreadPool: 允許的創(chuàng)建線程數(shù)量為Integer.MAX_VALUE,可能會創(chuàng)建大量的線程,從而導(dǎo)致 OOM。
自己寫線程池工具類 http://note.youdao.com/noteshare?id=30ca03fa9d7f9772e5e8a811089a1fa6
關(guān)于Autowired
Autowired annotation is not supported on static fields
Autowired 與 Resource 的區(qū)別
Autowired按類型裝配,Resource默認(rèn)按屬性名進(jìn)行裝配為什么HashMap初始化時要指定大小?
避免resize降低效率注釋
發(fā)布文檔,方便其他人了解代碼功能。
方法的注釋,說明功能、入?yún)?、返參、可能拋出的異常?/p>
/**
* @author: Ali
* @date: 2017/12/15
* @since: java 1.8
* description: XXXXXX
*
* @param someParam 入?yún)⒚枋? * @return returnParam 返參描述
* @throws XXXException XXX異常
*/
- maven庫引不下來,刪掉本地相應(yīng)倉庫,重新import