顯示具有 JAVA 標籤的文章。 顯示所有文章
顯示具有 JAVA 標籤的文章。 顯示所有文章

2020年9月20日

[IntelliJ IDEA] java imports 順序調成和eclipse預設相同

Settings → Editor → Code Style → Java → imports

設定 「class count to use import with '*'」值 99 (不能關掉..所以就99)

設定以下順序:


static all other, 

blank, 

java.*, 

blank, 

javax.*, 

blank, 

org.*, 

blank, 

com.*, 

blank, 

all other imports 



apply~ done~

2018年12月26日

[Eclipse]No Default Proposals提示功能無法使用解決方法

在coding的時候例如 在打某type後 打了那個.的時候 可以提示有什麼method可以用,但! 發現他什麼都沒有 alt+/也說 no proposal

怎麼辦!!

Windows → Preperences → Java > Editor → Content Assist →Advance 把Java Proposale跟Java Type Proposale打勾

done!

2018年9月7日

mybatis instr 字串 要串接 字串裡又有雙引號

<select id="selectLatestTemplateByVolume" parameterType="String" resultMap="ccpAsyncJobResultMap">
<bind name="jobCmdInfo" value="'volumeId&quot;:&quot;'+_parameter+'&quot;'" /><!-- volumeId":_parameter" -->
SELECT * FROM cloud.async_job
where instance_type='Template'
and job_cmd='org.apache.cloudstack.api.command.user.template.CreateTemplateCmd'
<![CDATA[ and instr(job_cmd_info,#{jobCmdInfo})>0 ]]>
order by id desc
limit 1
</select>


如果傳入是個map ( accountId=1, volumeUuid="123123123")
寫法又不太一樣


<select id="selectLatestTemplateByVolume" parameterType="Map" resultMap="ccpAsyncJobResultMap">
<bind name="jobCmdInfo" value="'volumeId&quot;:&quot;'+volumeUuid+'&quot;'" /><!-- volumeId":#{volumeUuid}" -->

SELECT * FROM cloud.async_job
where instance_type='Template'
and job_cmd='org.apache.cloudstack.api.command.user.template.CreateTemplateCmd'
<![CDATA[ and instr(job_cmd_info,#{jobCmdInfo})>0 ]]>
order by id desc
limit 1
</select>

2018年6月1日

[JAVA] 利用POI 建立excel的簡單範例

public void createWorkBook() throws IOException {

//建excel活頁簿
XSSFWorkbook workBook = new XSSFWorkbook();

//建第一個sheet,命名為 new sheet
XSSFSheet sheet = workBook.createSheet("first sheet");

// 建一row,在sheet上
Row row = sheet.createRow(0);

// 在row上建一個cell
Cell cell = row.createCell(0);

//設cell裡的值
cell.setCellValue("第一個cell");

// Or do it on one line.
row.createCell(1).setCellValue("第一列的第2個cell");
row.createCell(2).setCellValue(new Date());
row.createCell(3).setCellValue(true);
row.createCell(4).setCellValue(2);

//file命名為myExcekbook.xlsx
FileOutputStream fileOut = new FileOutputStream("d:/myExcekbook.xlsx");

// 把workBook寫進FileOutputStream
workBook.write(fileOut);
//關閉FileOutputStream
fileOut.close(); 


}

2018年4月3日

[JAVA]用JEXL處理算式

/**

* @author Querida
http://solnone.blogspot.tw/2010/06/apache-commons-jexl.html
*/

package testQ;



import org.apache.commons.jexl3.JexlContext;

import org.apache.commons.jexl3.JexlEngine;

import org.apache.commons.jexl3.JexlExpression;

import org.apache.commons.jexl3.MapContext;

import org.apache.commons.jexl3.internal.Engine;



public class TestJEXL {


public static void main(String[] args) {

// Create or retrieve a JexlEngine

JexlEngine jexl = new Engine();

// Create an expression object

String fomula = "quanty * price * 100";

JexlExpression jexlExpression = jexl.createExpression(fomula);



// Create a context and add data

JexlContext jexlContext = new MapContext();

jexlContext.set("quanty", 2);

jexlContext.set("price", 3);

// Now evaluate the expression, getting the result

Object o = jexlExpression.evaluate(jexlContext);

System.out.println(o);

}

}

[JAVA]DATE 的一些處理(joda time)

Date nowDate= new Date();
//java DATE TO joda time
new DateTime(nowDate);


//今天是一個月裡的第幾天
new DateTime(nowDate).getDayOfMonth();


//這個月有幾天
new DateTime(nowDate).dayOfMonth().getMaximumValue();


//上個月有幾天
DateTime dayOfPeriousMonth = new DateTime(nowDate).minusMonths (1);

System.out.println(dayOfPeriousMonth);

int daysInPeriousMonth=dayOfPeriousMonth.dayOfMonth().getMaximumValue();

System.out.println(daysInPeriousMonth);


//取出上個月的12號
DateTime periousM12=dayOfPeriousMonth.withDayOfMonth(12); System.out.println(periousM12 );

//joda time to java Date
new DateTime().toDate();


//本月第一天
DateTime firstDayOfMonth = new DateTime().dayOfMonth().withMinimumValue();

//某個時間是否是在今天內
if( new DateTime( someDateTime).isAfter( DateTime.now().minusDays(1) )){
System.out.println(someDateTime+" is in 24 hours");
}else {
System.out.println("not in!");
}

2018年1月23日

@QueryParam NULL but @RequestParam OK

Q:加了@QueryParam 明明有傳參數但 一直抓到null  why!!

A:改用@RequestParam

ref:
https://stackoverflow.com/questions/36392717/queryparam-always-showing-null

Because you are using Spring MVC, which has no connection whatsoever to JAX-RS, which @QueryParam is for. Spring using @RequestParam. If you are going to use Spring, I suggest you get rid of your JAX-RS Dependency, so you don't get confused on what you can and can't use.

[Quartz] 清空QUARTZ排程的mysql table


有時要對Trigger時間修改 或是其他有的沒的 想要先清空DB時

清除DB如下:

delete from QRTZ_SIMPLE_TRIGGERS;

delete from QRTZ_TRIGGERS;

delete from QRTZ_JOB_DETAILS;

delete from QRTZ_CRON_TRIGGERS;


(程式run起來後  排程會自動再寫入)




[Eclipse]安裝DECOMPILER 的PLUGIN

Step 1: Go to Help -> Install New Software -> click on 'Add'

Step 2: On pop-up fill these below details:

Name: JavaDecompiler

Location: http://jd.benow.ca/jd-eclipse/update/

Step 3: Click on checkbox - Java Decomplier Eclipse Plug-in.

Step 4: Click -> Next -> Next -> Accept The Agreement -> Finish

Step 5: Click on check-box -> Accept the trust certificate -> OK

Step 6: Restart the eclipse.



https://stackoverflow.com/questions/34368880/eclipse-mars-java-decompiler

2014年11月27日

native轉ascii

JDK安裝目錄中BIN底下有一個轉碼工具native2ascii.exe

unicode到ascii的方式:
native2ascii -reverse 原檔名 轉換檔名

ascii到unicode方式:
native2ascii 原檔名 轉換檔名



2014年10月7日

建立 RESTful WS Server

Web.xml

<servlet>
    <servlet-name>ServletAdaptor</servlet-name><!--指定 Servlet 幫你處理 RESTful WS-->
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>imemo.ws</param-value><!--指定 RESTful WS Package-->
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
     <servlet-name>ServletAdaptor</servlet-name>
     <url-pattern>/ws/*</url-pattern><!--指定 Servlet Mapping URL-->
</servlet-mapping>



 WS的Class

@Path("/members") //指定 RESTful 服務的 Path (URL)
public class AccountsServices {
    @POST //指定 HTTP Method
    @Consumes(MediaType.MULTIPART_FORM_DATA) //指定 Consumes (消化)資料型態
    @Produces(MediaType.TEXT_PLAIN) //指定 Produces (產出)資料型態
    @Path("vip") //指定 Subpath
    public String vip(@FormParam("account") String account) {
 
        return Response.ok("OK").build();
     }
}



WADL
URL: https://localhost:8888/ws/application.wadl

<application xmlns="http://research.sun.com/wadl/2006/10">
        <resources base="https://localhost:8888/ws/">
          <resource path="/members"><!--指定 Path-->
             <resource path="vip"><!--指定 Subpath-->
               <method id="vip" name="POST"><!--指定 HTTP Method -->
                  <request><representation mediaType="multipart/form-data"/></request><!--指定 Consumes (消化)資料型態 -->
                  <response><representation mediaType="text/plain"/></response><!--指定 Produces (產出)資料型態 -->
              </method>
        …



chrome套件:Postman

2014年6月19日

[JAVA][log4j] log4j2.xml

log4j2的xml寫法和1.x有所不同

但我1.x時不是寫xml.....所以 更增加了轉換的痛苦

2014年6月17日

[JAVA][log4j] 1.X→2.0


import org.apache.log4j.Logger;
↓↓
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;






Logger.getLogger("xxxAppender").error(e.getMessage());
↓↓
LogManager.getLogger("xxxAppender").error(e.getMessage());




log4j.xml/log4j.prperties
↓↓
log4j2.xml

(沒有prperties檔了.......==)



2014年5月19日

[JAVA][log4j] 詳細設定

一、Log4j簡介
Log4j有三個主要的元件:Loggers、Appenders、Layouts。

1、Loggers(寫Log )
被分為五個級別:DEBUG < INFO < WARN < ERROR < FATAL
只輸出級別不低於設定級別的訊息
ex:Loggers為INFO,則INFO、WARN、ERROR和FATAL都會輸出 DEBUG則不會

logger名稱階層關係
ex:名稱為"com.foo"的 logger 是名稱為"com.foo.Bar"的 logger的parent
程式中具名取得logger的方法是
Logger.getLogger(String name)  //名稱相同取得的logger一定一樣,不同則產生新的
通常我們用  Logger.getLogger(myApp.class) 取得loggger,名稱為程式的class  name,因此層級關係跟package層級關係吻合...

有一個最上層的root logger,root logger 一定存在的,且只能以 Logger.getRootLogger()方式取得它的參考.不能以具名方式取得.

2、Appenders(log訊息的終點(目的地))

常使用的類如下:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件大小到達指定size的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌訊息以輸出流格式發送到任意指定的地方)

如 System.out.println("Some message..."), 對Log4j 而言appenders 就是 console


配置模式:
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1

log4j.appender.appenderName.OptionN = valueN

3、Layouts( Log訊息的格式 )

常使用的類如下:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
org.apache.log4j.SimpleLayout(包含日誌訊息的級別和訊息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等訊息)

配置模式:

log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1

log4j.appender.appenderName.layout.OptionN = valueN


二、簡單範例

log4j.rootLogger=Info, A1, A2


# A1 is set to be a ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n

# A2 is set to be a file
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
log4j.appender.A2.File=./log/gpserver-${log4j.date}.log


2014年5月16日

[JAVA][log4j] 獨立輸出到不同地方

在做log處理的java中:

org.apache.commons.logging.Log mylog= LogFactory.getLog("myTest1");


 mylog.info("我在記log......");



在log4j.properties加入
log4j.logger.myTest1= INFO, A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=./log/myTest1.log
log4j.appender.A1.DatePattern ='_'yyyy-MM-dd'.log'
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss:SSS}][%p][%C-%L] %m%n


這樣就只會有是myTest1的log才會寫進file裡 (不會其他有的沒的log訊息也記進來)


但如果不想要輸出去log4j.rootLogger所配置的地方的話 要增加
log4j.additivity.myTest1 = false


其他設定: http://blog.sina.com.cn/s/blog_56fd58ab0100tcna.html

2014年4月17日

[JAVA][JPA] 處理getSingleResult沒有值

可用方法之一:

public static <T> T getSingleResult(Query query) {
    query.setMaxResults(1);
    List<?> list = query.getResultList();
    if (list == null || list.size() == 0) {
        return null;
    }
    return (T) list.get(0);
}

[ORACLE][JAVA] 數字前面補0 補*

用oracle的話 不管是前面補0還是補星號 用LPAD()就好 (後面補的話就是RPAD() )
SELECT LPAD(rank,3,'0') FROM xxx
SELECT LPAD(rank,3,'*') FROM xxx
--012
--*12

如果要用JAVA的話
數字補0:
String.format( "%03d", 12);//012


如果要補星號: String.format("%3s", "12").replace(' ', '*');//*12


如果用StringUtils
org.apache.commons.lang.StringUtils.leftPad("12", 3, "*");//*12

2014年3月31日

[JAVA] 解決下載檔案中文檔名顯示異常

方法1
String fileName = new String(fileName.getBytes(), "ISO8859-1");  
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);



方法2(ie11後失效==)
//判對MSIE 使用URLEncoder.encode()  Firefox 使用BCodec.encode()
if (request.getHeader("User-Agent").indexOf("MSIE") != -1) {
    response.setHeader("Content-Disposition",
"" + openType + "; filename=\"" + URLEncoder.encode(filename, "UTF-8") + "\"");
} else {
    try {
        response.setHeader("Content-Disposition",
    "" + openType + "; filename=\"" + new BCodec().encode(filename, "UTF-8") + "\"");
    } catch (EncoderException ex) {
        ex.printStackTrace();
    }