雜問題,自己記錄---java

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>注入

 

  1.     <resultMap id="peopleResultMap" type="People">  
  2.         <id property="id" column="id" />  
  3.         <result property="name" column="name" />   
  4.         <collection property="qqs" ofType="string" javaType="list">  
  5.             <result column="qq" />  
  6.         </collection>  
  7.     </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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章