spring boot transactional force commit

บางครั้งถ้ามี Query หลายๆ Statement ต่อกัน อาจทำให้เกิดข้อผิดพลาด Constraint เช่นพวก Unique ได้ เพราะมันจะรอ commit พร้อมกัน เราจึงต้องย้ายบาง Statement ไปสร้างเป็น method ใหม่ และใส่ Annonation นี้ไว้บนหัว method เพื่อที่จะ force commit

@Transactional(value = "transactionManager",propagation = Propagation.REQUIRES_NEW)

https://stackoverflow.com/questions/24338150/how-to-manually-force-a-commit-in-a-transactional-method

Posted in jquery, spring boot | Leave a comment

oracle jdbc connection style

Thin-style

jdbc:oracle:thin:@HOST:PORT/SERVICE_NAME

TNSname-style

jdbc:oracle:thin:@(description=(address=(host=HOST)(protocol=tcp)
(port=PORT))(CONNECT_DATA=(SERVICE_NAME=SERVICE_NAME)))

TNSNames Alias Syntax

You can find the available TNSNAMES entries listed in the tnsnames.ora file on the client computer from which you are connecting. On Windows, this file is located in the ORACLE_HOME\NETWORK\ADMIN directory. On UNIX systems, you can find it in the ORACLE_HOME directory or the directory indicated in your TNS_ADMIN environment variable.

For example, if you want to connect to the database on host myhost as user scott with password tiger that has a TNSNAMES entry of MyHostString, then write the following:

OracleDataSource ods = new OracleDataSource();
ods.setTNSEntryName("MyTNSAlias");
ods.setUser("scott");
ods.setPassword("tiger");
ods.setDriverType("oci");
Connection conn = ods.getConnection();

The oracle.net.tns_admin system property must be set to the location of the tnsnames.ora file so that the JDBC Thin driver can locate the tnsnames.ora file. For example:

System.setProperty("oracle.net.tns_admin", "c:\\Temp");
String url = "jdbc:oracle:thin:@tns_entry";

Note:

When using TNSNames with the JDBC Thin driver, you must set the oracle.net.tns_admin property to the directory that contains your tnsnames.ora file.

java -Doracle.net.tns_admin=$ORACLE_HOME/network/admin

Spring boot datasource

public DataSource dataSourceWrite() {
DataSource dataSource = new DataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(OracleUrl);
dataSource.setUsername(OracleUsername);
dataSource.setPassword(OraclePassword);
dataSource.setMaxActive(maxActive);
dataSource.setMaxIdle(maxIdle);
dataSource.setMinIdle(minIdle);
dataSource.setInitialSize(initialSize);
dataSource.setMaxWait(maxWait);
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery("SELECT * FROM DUAL");
return dataSource;
}

reference http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm

Posted in java | Leave a comment

how to verify facebook access token?

1.Get App AccessToken

https://graph.facebook.com/oauth/access_token?client_id=xxx&client_secret=yyy&grant_type=client_credentials

2.Get Token Info

https://graph.facebook.com/debug_token?input_token=Facebook Token&access_token=App Access Token

Posted in ไม่มีหมวดหมู่ | Leave a comment

php opcache คืออะไร ติดตั้งอย่างไร

php opcache คืออะไร ติดตั้งอย่างไร

OpCache จะเก็บคอมไพล์โค้ด PHP (OpCodes) ลงใน memory เก็บเป็น cache และนำมาใช้ใหม่ re-used โดยตั้งแต่ php5.5 จะมี OpCache อยู่ใน core php อยู่แล้ว แต่ถ้าต่ำกว่า 5.4 และ มากกว่า 5.2 เราสามารถติดตั้งเองได้ โดยจะทำให้ php application โดยรวมเร็วขึ้น 40-70% เลยทีเดียว

yum install php-pecl-apcu

# Install APC (Alternative PHP Cache) เอาไว้ cache code โดยจะ cache มันไว้ ณ compile state
pecl install apc
#nano /etc/php.d/apc.ini
extension=apc.so
apc.enabled=1

yum install php-pecl-zendopcache

restart apache

check phpinfo

opcache phpinfo

recommended setting

; Sets how much memory to use
opcache.memory_consumption=128

;Sets how much memory should be used by OPcache for storing internal strings
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8

; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000

;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60

;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1

;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Posted in php | Leave a comment

spring custom response @JsonSerialize

POJO for response

JsonPropertyOrder({ "name", ... })
public class Student {
    @JsonSerialize(using = EmptyStringSerializer.class)
    @JsonProperty("name")
    private String name;
   
    ...
}

Custom Serializer Class , You can modify this class

public class EmptyStringSerializer extends JsonSerializer<String> {

    @Override
    public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        /*if (s == null) {
            // don't write this node
            return;
        }*/

       
         jsonGenerator.writeString(s);
       
    }
}
Posted in spring boot | Leave a comment