杂问题,自己记录---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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值