1.如何靈活定義函數參數數量
List<String> properties;
public PageSet(int page, int size, int direction, String... properties){
this.page = page;
this.size = size;
this.direction = direction;
this.properties = null == properties ? new ArrayList<String>() : Arrays.asList(properties);
}
String... properties
this.properties = null == properties ? new ArrayList<String>() : Arrays.asList(properties);
2.thymleaf 標籤屬性引用model變量
例如 th:include :模版路徑要加入變量,則用 ' 分隔其該屬性他的內容
model.addAttribute("modelName", modelName);
th:include="'model/'+${modelName}+'/contents' :: contentList"
3.sql腳本創建表時用變量名代替表名
SET @tb='表名';
SET @sql = CONCAT('SELECT * FROM ', @tb);
PREPARE st FROM @sql;
EXECUTE st;
DEALLOCATE PREPARE st;
4. nio
http://ifeve.com/selectors/
5.樹形結構節點的基本判斷
(1)id 不能等於 parentid
(2)根的Parentid不能是其某個子節點的id(只能是一個固定的默認id)
6.centos 開放端口
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9002 -j ACCEPT
service iptables restart
7.spring 獲取服務的ip地址和端口號
public IBaseResult insertExternalFile(MultipartFile[] files,HttpServletRequest requset) {
String ip = requset.getRemoteAddr();
int port = requset.getServerPort();
8.
1.創建一個tomcat
docker run -d -p 9001:8080 --restart=always -v /usr/local/dev/dockerTomcatFile/webapps/merchant:/usr/local/tomcat/webapps -v /etc/localtime:/etc/localtime:ro --name=merchant docker.io/tomcat:latest
2.創建一個mysql
docker run --name mysqlContainerTest --restart=always -e MYSQL_ROOT_PASSWORD=12345 -e TZ="Asia/Shanghai" -p 3310:3306 docker.io/mysql:5.7
3,創建一個redis
docker run --name redisTest -p 6379:6379 -v $PWD/usr/local/dev/webapp/rabbitmqData:/data -d redis:3.2 redis-server --appendonly yes
-p 6379:6379 : 將容器的6379端口映射到主機的6379端口
-v $PWD/usr/local/dev/webapp/rabbitmqData:/data : 將主機中當前目錄下的/usr/local/dev/webapp/rabbitmqData掛載到容器的/data
redis-server --appendonly yes : 在容器執行redis-server啓動命令,並打開redis持久化配置
進入redis
docker exec -it 26049fa0a9e9 redis-cli
9 mybatis collection list<String>注入
- <resultMap id="peopleResultMap" type="People">
- <id property="id" column="id" />
- <result property="name" column="name" />
- <collection property="qqs" ofType="string" javaType="list">
- <result column="qq" />
- </collection>
- </resultMap>
10,獲取接口所在進程的 httpservletrequest對象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
11.mysql 手動指定排序順序 舉例
select *
from merchant_image_pool t
#where id in (121,122,123,124,125)
order by field(id,121,123,122,187)
12 List操作
Java中List集合去除重複數據的方法
1. 循環list中的所有元素然後刪除重複
public static List removeDuplicate(List list) {
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) {
for ( int j = list.size() - 1 ; j > i; j -- ) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
return list;
}
2. 通過HashSet踢除重複元素
public static List removeDuplicate(List list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
return list;
}
3. 刪除ArrayList中重複元素,保持順序
// 刪除ArrayList中重複元素,保持順序
public static void removeDuplicateWithOrder(List list) {
Set set = new HashSet();
List newList = new ArrayList();
for (Iterator iter = list.iterator(); iter.hasNext();) {
Object element = iter.next();
if (set.add(element))
newList.add(element);
}
list.clear();
list.addAll(newList);
System.out.println( " remove duplicate " + list);
}
4.把list裏的對象遍歷一遍,用list.contain(),如果不存在就放入到另外一個list集合中
public static List removeDuplicate(List list){
List listTemp = new ArrayList();
for(int i=0;i<list.size();i++){
if(!listTemp.contains(list.get(i))){
listTemp.add(list.get(i));
}
}
return listTemp;
}
13.spring 統一攔截異常
https://www.cnblogs.com/magicalSam/p/7198420.html
1.4 兩個註解
@ExceptionHandler
https://blog.csdn.net/kinginblue/article/details/70186586
@responseBody
https://www.cnblogs.com/qiankun-site/p/5774325.html
1.5 spring boot 設置失誤回滾
// @Bean
// public DataSourceTransactionManager makeDataSourceTransactionManager(DruidDataSource dataSource) {
// DataSourceTransactionManager manager = new DataSourceTransactionManager();
// manager.setDataSource(dataSource);
// return manager;
// }
https://blog.csdn.net/Jamie_Jiang/article/details/78227422?locationNum=5&fps=1
https://blog.csdn.net/sylrain/article/details/49887633
https://blog.csdn.net/lgd200008/article/details/79056645
https://blog.csdn.net/github_25679381/article/details/54176950
1.6 mysql 獲取毫秒微秒
--毫秒
SELECT REPLACE(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)), '.', '');
--微秒
SELECT REPLACE(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)), '.', '');
1.7 mybatis 條件判斷
<if test="findStat != null">
<choose>
<when test="findStat == 1">
and t1.end_date >= now() and t1.was_online = 1
</when>
<when test="findStat == 2">
and t1.was_online = 0
</when>
<when test="findStat == 3">
and now() > t1.end_date
</when>
</choose>
</if>
1.8 maven單獨引入jar包
<dependency>
<groupId>jna</groupId>
<artifactId>jna</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/jna.jar</systemPath> <!--項目根目錄下的lib文件夾下-->
</dependency>
<dependency>
<groupId>jna</groupId>
<artifactId>jna_platform_4.1.0</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/jna-platform-4.1.0.jar</systemPath> <!--項目根目錄下的lib文件夾下-->
</dependency>
注意:groupId可以重複,但是不能artifactId同時重複,否則會被識別爲同一個jar包而只引用第一個。
遍歷ConcurrentHashMap非阻塞
//方法三:使用Iterator遍歷,使用併發集合不會報異常,性能類似於方法二
//使用泛型
Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
System.out.println("使用Iterator遍歷,並且使用泛型:");
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
//注意這裏操作了集合,下面的的遍歷不會再打印0
if("0".equals(entry.getKey())) {
map.remove(entry.getKey());
}
}
遍歷list 線程安全
https://blog.csdn.net/Somhu/article/details/78874634
https://blog.csdn.net/asdfsadfasdfsa/article/details/73294142
https://www.cnblogs.com/wl0000-03/p/5973039.html
https://www.cnblogs.com/wucao/p/5350461.html
map 線程安全
https://blog.csdn.net/cnhk1225/article/details/52413201
給互斥資源加鎖
boolean msgCircleCheckLock = false;
ArrayList<ConfirmMessage> messageQueue = new ArrayList<ConfirmMessage>();
try {
if(this.msgCircleCheckLock){
this.wait();
}
msgCircleCheckLock = true;
for(Object obj : messageQueue){
ConfirmMessage confirm = (ConfirmMessage)obj;
if(null != confirm){
confirm.resend();
}
}
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
finally {
msgCircleCheckLock = false;
this.notify();
}
Eureka的自我保護模式
如果在Eureka Server的首頁看到以下這段提示,則說明Eureka已經進入了保護模式。
1 |
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE. |
保護模式主要用於一組客戶端和Eureka Server之間存在網絡分區場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務註冊表中的信息,不再刪除服務註冊表中的數據(也就是不會註銷任何微服務)。
一些參考
https://blog.csdn.net/tianyaleixiaowu/article/details/78184793
阿里雲申請免費SSL證書,並配置到Tomcat,實現https訪問
https://blog.csdn.net/binglong_world/article/details/80728230
maven打包時引入別的文件夾裏的配置文件
<resources>
<resource>
<directory>src/main/resource</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>