SBF胜博发游戏在线官网spring boot 如何读取自定义配置

( SBF胜博发游戏在线官网 )

目前采用spring-boot快速开发一个restful api的应用,在配置文件这块卡住了,请求各位大神。
我根据网上的方法尝试了两种都不ok
第一种:基于application.properties配置文件新增

配置文件信息:

application:
   des:
      key=123456

引用代码信息:

@RestController
@RequestMapping(value="/app")
@EnableAutoConfiguration
public class ServiceConfigController {

    @Value("${application.des.key}")
    String desKey;

以上方式是根据这篇博客来弄的深入学习微架构
报错:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'application.des.key' in string value "${application.des.key}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:955)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
    ... 18 more

不知道是识别不了配置文件中的语法还是找不到这个配置。

我还尝试了一下配置书写方式:

application.des.key=1231

也是报错。

第二种还是基于application.properties配置文件

配置文件信息

des.key=123

新建一个java bean

@ConfigurationProperties(prefix="des")
public class DesProperties {

    private String key;

   //此处省略getter和setter方法
}

引用代码:

    @Autowired
    DesProperties desProperties;

启动类代码:

@SpringBootApplication
@EnableConfigurationProperties(DesProperties.class)
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

启动不报错,但是注解的引用是一个空的对象,可能是我配置的bean没有被注入成功。。表示无解。

第三种方式:采用自定义的配置文件 config.properties

配置文件信息:

des.key=123

java bean配置:

@ConfigurationProperties(prefix = "des",locations = "classpath:config/config.properties") 
public class DesProperties {

    private String key;

   //此处省略getter和setter方法
}

启动类代码:

@SpringBootApplication
@EnableConfigurationProperties(DesProperties.class)
public class Start {

    public static void main(String[] args) {
        SpringApplication.run(Start.class, args);
    }
}

一样的,启动不报错,引用的时候,是一个空对象。
求各位大神指教。。。。。

我猜是你的目录结构不对吧,你的application.properties应该放在src/main/resource下面

另外可以最好通过指定外部配置文件的方式启动:

java -jar location_of_your_jar_file.jar --spring.config.location=location_of_your_config_file.properties

有一篇讲spring boot部署的文章可以看看:部署Spring Boot应用,这个网站里有很多关于spring boot的文章,最最重要的是还有代码!

自己顶一下。。。。。各位问问题的太多了,瞬间沉入海底,再顶

你这个尝试太多方法了啊。
第一种:指定一下属性文件就可以了:
@PropertySources({ @PropertySource(value = “classpath:application.properties”, ignoreResourceNotFound = true), @PropertySource(value = “file:./application.properties”, ignoreResourceNotFound = true) })

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

SBF胜博发游戏在线官网为什么java的char可以强转int变量?

( SBF胜博发游戏在线官网 )

主要是这么2个问题
1.char本身是2个字节的,int是4个字节的,原生类型的相互转换并且大小不等,jvm是怎么处理的?
2.char本身是unicode编码的,强转int变量后是符合ascii标准的,char是兼容ascii的吗?
另外,上面的问题前提都是在java环境下。

char并不是2字节.
char并不是2字节.
char并不是2字节.

char的实现是UTF-16, UTF-16是一种可变长编码. 那就意味着, 有一部分编码, 需要两个2字节来表示一个字符.
问题就变得很好理解. 无非就是UTF16到UTF32的转换, UTF32刚好是一个4字节.

PS: 斜着的部分是我猜的, 我不是Java程序员.

转int高位会扩展为符号位,0x10会变成0x00000010,0x8000会变成0xffff8000
转换跟编码无关,无论啥编码,都是如上转换。

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

SBF胜博发游戏在线官网win10 java8 环境变量配置

( SBF胜博发游戏在线官网 )

刚刚装的win10,发现一个问题,就是配置java环境的时候如果使用java_home配置classpath path, 那么java命令可以正常使用而javac命令不能正常使用,但是如果不使用java_home,直接使用绝对路径,则java javac等命令可以正常使用,这是为什么呢?不知道大家有没有遇到过类似的情况呢?

你的java_home怎么配的,java_home配置的时候也是要配成绝对路径的吧(印象当中好像如此,我用win10配过,没遇到题主所说的问题…不过目前已经脱离windows投奔mac和linux了)

配置JAVA_HOME(JDK的路径)和PATH(%JAVA_HOME%\bin)即可!!

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

SBF胜博发游戏在线官网通讯服务器客户端掉线

( SBF胜博发游戏在线官网 )

用mina框架开发的通讯服务器,客户端掉线的情况比较多,一天2,3次吧,用的是udp,自己写协议,应用层有ack处理,最近一两天出现过两次客服端集体掉线的情况,一直不知道怎么处理,请问各位有没有这方面的经验能够指导指导

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

sbf888胜博发restful接口返回值设计

( sbf888胜博发 )

关于restful接口返回值设计有一些疑问,目前我采用的是

Result { status,msg,data}

当status 为 0 时 代表请求成功 data里有返回的数据 为Json格式 msg里没有数据
当status 为 1 时 代表请求失败 data里没有数据 msg里有错误提示语

使用了一段时间发现了几个问题

  • 请求成功的时候 data里的数据格式 定义 需要人为的告诉对方 这个数据的定义的类名,所以想增加一个参数 传入类名 例如: type:OrderDTO 这样对方就可以直接反序列化(我已把数据格式定义DTO的jar包挂在nexus上面),但是感觉作为一个接口提供方,平台性质的,感觉这样太调皮了,特别是Ios也没办法用你这样的数据格式,andorid就很方便可以直接用。

  • 请求失败的时候 ,我的msg里统一是英文处理格式,是把国际化放在客户端上面,还是放在后台,这样后台每次都要去改文案提示语,以及多国语言,纠结。

重新看了淘宝,微信,开放平台的设计,都感觉返回值不是很友好,不好统一处理。

例如:

正常返回:

{
    "trade_snapshot_get_response":{
        "trade":{
        }
    }
}

异常返回:

{
    "error_response":{
        "code":50,
        "msg":"Remote service error",
        "sub_code":"isv.invalid-parameter",
        "sub_msg":"非法参数"
    }
}

但是他们都会设置全局的状态码,感觉也没太大的好处,不如直接返回错误信息,干嘛还要状态码。

各位走过路过的朋友,麻烦给点建议。

===========================
更新:

感觉全局状态码很麻烦,要公布一份全局状态码给别人,例如html形式,而且还要维护。不如直接在代码里返回给对方错误信息提示,例如:msg:errorId 代表Id错误 对面根据errorId 提示对应的文案术语。。
感觉比 返回 状态码 40001 代表 Id错误要好一点。。

=================================================
更新:

总感觉用状态码的话,简单是定义接口简单,烦躁的地方是 维护这个状态码 另外 一个接口的可能情况 别人不知道 难道要所有状态码里的异常情况都判断一遍么?微信公众平台,淘宝公众平台就是这样干的,这也太不科学了

推荐你学习 REST 层级划分模型,如下图:

英文版 Richardson Maturity Model
中文版 RMM Level — 对于REST的层级划分模型

我现在使用的Controller返回类型–Result

 // 结果编码
  protected final int code;

  protected final String message;

  protected final T value;

  protected final Map<String, Object> extraInfo;

  protected Result(int code, String message, T value) {
    this(code, message, value, null);
  }

code就是使用的http status code. 如果是错误信息的话, 会有一个errorReason, 如

return Result.badReq("phone_existed", "手机号已注册");
return Result.badReq("user_not_found_or_password_error", "用户名或密码错误");

前端若不使用后端的错误提示的话, 可以根据errorReason自定义错误提示。
一个例子:

{
  "code": 400,
  "message": "用户名或密码错误",
  "errorReason": "user_not_found_or_password_error"
}

另外我们使用了swagger来定义Restful接口, 如下所示:

你可以去百度api store看看,返回大体都是你设计的这种,这说明这已经比较合理经过检验的

个人感觉还是不要传入类名,作为一个平台接口没有必要做这么hack的事情,只兼顾Android没什么意义。而且这么设计的话就意味着前后台必须一起维护,也许暂时用着很爽,但是以后新增新的接口和复用之前的接口都可能会出现问题。
关于请求失败,既然你有国际化的需求,那就应该使用错误码,让客户端决定如何显示。个人感觉接口层的错误信息没必要暴露给用户,只要写到日志就够了。客户端应该负责所有的用户界面显示工作,不应该有可预料的错误信息透明地穿过客户端直接从后端直接传给用户。

只是一些个人意见,欢迎大家批评指正。

建议你去看一下 JSON API,不是说你一定要这么做,但你顾虑的事情显然是有完整且标准化的规范的。

另外,状态为什么不用 HTTP Status Code?HTTP 协议提供了标准化的状态码,想不通为什么很多 API 不去善加利用呢?

既然是restful风格 推荐使用HTTP Status Code

返回类名? JSON是平台无关的,没必要知道是什么类,对于Java来说JSON完全可以当成是Map使用,而且你提供的是API,那么使用者就得按照你设计的去做,就像微信API,他设计成什么样你就得如何处理。
如果你想设计的优美点就用返回码+JSON,错误提示都可有可无,说实话没人在意你的msg,都是根据code去处理,因为很多情况下msg是可变的,虽然模板固定,但是内容可变,比如appKey不存在,有些msg可能直接把appKey放进去 所以是变化的;但是code肯定是不变的,维护不好全局code是你们自身能力的问题,可不能偷懒坑了开发者。

1)Restful接口的要做到平台无关,并且传递的JSON格式数据量要紧凑
2)返回的消息最好带有code和消息说明,code定义不同的范围,表示不同的消息类型及级别;code对应默认的消息描述,有消息说明就用消息说明的

RESTFul的response只要能说明:你请求的结果和状态即可。所以做API的,做好这些,大家都遵守就没啥问题。
譬如

{

"code":0,
"msg":"ok",
"data":[1,2,3],

}

不推荐直接硬编码中文错误提示。可能对方就依赖你的msg信息,API应该全部英文+数字,全局状态码是非常有必要的,这大大增加了你的扩展性。一些不必要的信息不推荐返回,比如api地址啊,这些,新浪好像返回了,但实际上,如果不是那种平台级面向多用户的话,自己维护好API文档就OK了。

还有两种风格也共选择:
1 保持结构的统一,也就是说,就算code是-1(假设系统错误),那么data也返回[]
2 以code为准,这样如果code 是-1,则不显示data,因为没有data嘛,把msg变成errorMsg
可能还有很多其他风格,但是,只要你保持你的API风格统一,基本上没啥大问题了。千万不要一会儿以这个为主,一会儿以那个为主。记住,你是写API的,只要数据完全符合要求,你用啥名字就用啥,不要为这些争执不休。

(看完/读完)这篇文章有何感想! sbf888胜博发的分享…

SBF胜博发游戏在线官网在intellij idea 中使用uikit 提示UIkit requires jQuery怎么办?

( SBF胜博发游戏在线官网 )

这是目录结构

这是对于文件的引用

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/uikit.min.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/uikit.gradient.min.css">
<script src="${pageContext.request.contextPath}/js/uikit.min.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery.js"></script>

Tomcat版本8.0.30
jquery版本2.1.4
各种浏览器(chrome,IE,edge)中都报错Uncaught Error: UIkit requires jQuery

因为课程作业需要使用jsp,临时自学,可能有很多不规范的地方,望大家海涵。

两个script标签交换位置

把你的Script引用改为:

<script src="${pageContext.request.contextPath}/js/jquery.js"></script>
<script src="${pageContext.request.contextPath}/js/uikit.min.js"></script>

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

2016最新官网SimpleDateformat 中可以使用正则表达式匹配吗?

( 2016最新官网 )

SimpleDateformat 中可以使用正则表达式匹配吗?

首先,看这个文档,看这个example,http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
说明SimpleDateFormat可以通过组合’M’, ‘d’, ‘y’等规定的字母来匹配不同的时间格式。

不知道题主使用正则的目的是不是匹配不同格式的时间。
如果只是一种,几种,只要知道时间的格式,不外乎多定义几个SimpleDateFormat实例。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse("2013-12-24 18:31:20");
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date date = sdf.parse("12/24/2013");

如果是不确定的时间格式,利用了正则表达式之后我觉得接下来也不知道该怎么去解析结果。


Update:2015年11月30日

能够解析正则表达式,能将正则表达式的元字符如?, ., $,^解析成功一定的规则,是正则表达式引擎完成的事情。

这里的SimpleDateFormat似乎可以比方成正则表达式引擎,但是它的解析方式不一样,它不懂?,$,^,它也不会把?当做正则表达式的量词来处理,不会把$用来匹配一行的结尾等。

(看完/读完)这篇文章有何感想! 2016最新官网的分享…

SBF胜博发游戏在线官网jsp页面自动生成的basePath脚本,端口号后面为什么少一个”/”?

( SBF胜博发游戏在线官网 )

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

request.getServerPort()后面为什么不加”/”? myeclipse自动生成的jsp界面都不加,网上的好像也都不加。

打印下path 就知道了

可以看下源码方法的说明文档。request.getContextPath()获取的是项目的上下文路径,是一个相对路径。是”/”开头的

  • Returns the portion of the request URI that indicates the context

    • of the request. The context path always comes first in a request

    • URI. The path starts with a “/” character but does not end with a “/”

    • character. For servlets in the default (root) context, this method

    • returns “”. The container does not decode this string.

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

sbf888胜博发java 怎么import一个jar包里面的class

( sbf888胜博发 )

比如我要引入 servlet 的包,要使用

import javax.servlet.*;
import javax.servlet.http.*;

这样的命令去import,我的jar包应该放在哪里?(我试过无论放哪里都不行。。。只有放到classpath变量指向的目录才行)
但是解压后,把 javax 目录放到我的 java 文件的目录下就可以,但总觉得这应该不是正确的姿势
我想的是把 jar 包都放到一个 lib 目录下,然后在 java 程序里 import,应该怎么做?

把jar包放到某个目录中,例如lib目录,然后编译和运行的时候加上-cp参数:

# 编译
javac -cp ".;lib/a.jar;lib/b.jar;..." XXXX.java

# 运行
java -cp "同上" XXXX

(看完/读完)这篇文章有何感想! sbf888胜博发的分享…

SBF胜博发游戏在线官网请问这个java.nio的例子哪里错了?

( SBF胜博发游戏在线官网 )

直接上代码。
client端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

public class JavaTest {

    public static void main(String[] args) throws Exception {
        SocketChannel client = SocketChannel.open();
        client.connect(new InetSocketAddress("127.0.0.1", 30003));
        ByteBuffer buffer = ByteBuffer.allocate(1024);

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String console = null;
        byte[] bytes = new byte[1024];
        while ((console = bufferedReader.readLine()) != null) {
            buffer.clear();
            buffer.put(console.getBytes(), 0, console.getBytes().length);
            int n = client.write(buffer);
            System.out.println("Client write: " + n);
            buffer.flip();
            n = client.read(buffer);
            System.out.println("Client read: " + n);
            buffer.get(bytes, 0, n);
            buffer.flip();
            System.out.println(new String(bytes));
        }
        client.close();
    }

}

server端代码:

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class Test {

    public static void main(String args[]) throws Exception
    {
        ServerSocketChannel server = ServerSocketChannel.open();
        server.socket().bind(new InetSocketAddress("127.0.0.1", 30003));
        Selector selector = Selector.open();

        server.configureBlocking(false);
        SelectionKey skey = server.register(selector, SelectionKey.OP_ACCEPT);
        ByteBuffer buffer = ByteBuffer.allocate(1024);

        while (true) {
            selector.select();
            Set<SelectionKey> result = selector.selectedKeys();
            Iterator<SelectionKey> resultIterator = result.iterator();
            while (resultIterator.hasNext()) {
                SelectionKey eachone = (SelectionKey)resultIterator.next();

                //if server has an acceptable client
                if (eachone.isAcceptable()) {
                    ServerSocketChannel acceptChannel = (ServerSocketChannel)eachone.channel();
                    //new client
                    SocketChannel client = acceptChannel.accept();
                    client.configureBlocking(false);
                    SelectionKey clientkey = acceptChannel.register(selector, SelectionKey.OP_READ);
                } else if (eachone.isReadable()) {
                    SocketChannel client = (SocketChannel)eachone.channel();
                    //readable client
                    byte[] bytes = new byte[1024];
                    buffer.clear();
                    int n = client.read(buffer);
                    System.out.println("Server read: " + n);
                    buffer.flip();
                    buffer.get(bytes, 0, n);
                    System.out.println(new String(bytes));
                    buffer.flip();
                    n = client.write(buffer);
                    System.out.println("Server write: " + n);
                    client.close();
                }
                resultIterator.remove();
            }
        }
    }
}

client端从System.in读入一行字符,write到server端,再从server端read,将server端发回来的字符串输出到System.out上。
调式时出错了,求问为什么。

你也不把出错信息发一下?

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

sbf888胜博发mysql rollback 原理以及若干疑问

( sbf888胜博发 )

最近在研究mysql的事务,参考了网上的一些例子写了一些,但是感觉有一点疑问,google后发现还是没找到答案,翻了下源码,还没找到核心关键点,想请大神们,帮忙指个路

1.如果在commit之前发生异常,进入catch里显式rollback,会造成什么隐形后果,如果在catch里去掉rollback,因为也没有commit所以数据还是不会提交,什么情况下会rollback才会真正发挥作用,并且这个作用如何和innodb挂钩的,看了下ConnectionImpl里的rollback源码,还没找到核心重点部分。

2.我写的这段简单的jdbc事务,有没有问题,我也是按照网上的模仿了下,如果有问题,一般的写法是怎么样的

3.commit和rollback实际的作用,原理是什么让事务提交和回滚,我所知道的spring-mybatis是用的aop,但是jdbc都是依赖的数据库的手动提交方式,那回滚呢?

4.Spring里所谓的小事务控制是什么样的,Manager层

5.insertTest1方法是自己try catch 还是抛出去 让外层得到异常 然后rollback

6.感觉insertTest1(con);insertTest2(con);这里有问题,如果insertTest1有异常 直接insertTest2不会执行,也就相当于事务的感觉(要么同时执行,要么都不执行)但是这里是通过异常造成的流程控制,不是真正的事务控制。

7.执行下面代码 insertTest1(),insertTest2()都正常执行(插入符合规范的值,不抛异常),finally里的rollback不起作用,test1,test2里还是有数据,怎么样去最终为什么没起作用,查看了数据库是innodb的

public static void main(String[] args) {
        Connection con = null;
        try {
            con = getConnection();
            con.setAutoCommit(false);
            insertTest1(con);
            insertTest2(con);
            con.commit();
            System.out.println("=======JDBC Transaction commit===========");
        } catch (SQLException e) {
            try {
                con.rollback();
                System.out.println("=======JDBC Transaction rolled back successfully=======");
            } catch (SQLException e1) {
                System.out.println("=======SQL Exception in rollback" + e1.getMessage()); //回滚必要条件:1.同一个transaction 2.connection未关,所以这里要加异常处理
            }
            e.printStackTrace();
        }finally{
            try {
                con.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        
    }

Sql


    CREATE TABLE `test1` (
    `id`  bigint(1) NOT NULL DEFAULT 0 ,
    `name`  varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    PRIMARY KEY (`id`)
    )
    
    CREATE TABLE `test2` (
    `id`  bigint(1) NOT NULL DEFAULT 0 ,
    `name`  varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    PRIMARY KEY (`id`)
    )

Java


    package com.mousycoder.server.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class JdbcTransaction {
        
        public final static String DB_DRIVER_CLASS = "com.mysql.jdbc.Driver";
        public final static String DB_URL = "jdbc:mysql://xxx.mysql.rds.aliyuncs.com/weitoo";
        public final static String DB_USERNAME = "xxx";
        public final static String DB_PASSWORD = "xxx";
        public static final String INSERT_TEST1 = "INSERT INTO test1(id,name) VALUES(?,?)";
        public static final String INSERT_TEST2 = "INSERT INTO test2(id,name) VALUES(?,?)";
    
        
    
        public static void main(String[] args) {
            Connection con = null;
            try {
                con = getConnection();
                con.setAutoCommit(false);
                insertTest1(con);
                insertTest2(con);
                con.commit();
                System.out.println("=======JDBC Transaction commit===========");
            } catch (SQLException e) {
                try {
                    con.rollback();
                    System.out.println("=======JDBC Transaction rolled back successfully=======");
                } catch (SQLException e1) {
                    System.out.println("=======SQL Exception in rollback" + e1.getMessage()); //回滚必要条件:1.同一个transaction 2.connection未关,所以这里要加异常处理
                }
                e.printStackTrace();
            }finally{
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        
            
        }
        
        public static Connection getConnection() {
            Connection conn = null;
                try {
                    Class.forName(DB_DRIVER_CLASS);
                    conn = DriverManager.getConnection(
                            DB_URL,
                            DB_USERNAME, DB_PASSWORD);
                    System.out.println("======DB connection successfully========");
                } catch (ClassNotFoundException | SQLException e) {
                    System.out.println("======DB connection failed=========");
                    e.printStackTrace();
                } 
            return conn;
        }
        
        public static void insertTest1(Connection conn) throws SQLException {
            PreparedStatement stmt;
                stmt = conn.prepareStatement("INSERT INTO test1(id,name) VALUES(?,?)");
                stmt.setInt(1, 1);
                stmt.setString(2, "1"); 
                stmt.executeUpdate();
                System.out.println("======insert into test1 successfully======");
                stmt.close();
        
        }
        
        public static void insertTest2(Connection conn) throws SQLException {
            PreparedStatement stmt;
                stmt = conn.prepareStatement("INSERT INTO test2(id,name) VALUES(?,?)");
                stmt.setInt(1, 1);
                stmt.setString(2, "11"); //故意长度超出
                stmt.executeUpdate();
                System.out.println("======insert into test2 successfully========");
                stmt.close();
            
        }
    }

进行事务处理的时候,MySQL 在开始事务时会切换到一个延缓操作的状态,这个状态下操作并不都是立即执行的(通常情况下语句是立即执行的)。而在 commit 时,会将延缓执行的操作都执行进去,并将状态回归到及时写入状态。同样的, rollback 时会把延缓写入的操作抛弃掉,此间申请的锁释放掉,并将状态回归到及时写入状态。

执行 rollback 的关键在于释放 申请的锁 和 回归及时写入状态,而并不是放弃未写入的操作(你关心的点在未写入的操作,然而执行与不执行 rollback 都没有操作写进去,所有你感觉执行或不执行都没什么区别)。

有时候你不执行 rollback ,影响并不会马上提现,毕竟你下一次调用 startTransaction 的时候还是会重置一下状态。但是如果你在事务之中申请了锁,或者是其他一些关联操作,那就会响应你其他与之关联操作的执行。这就好比是关闭程序,rollback 是正常的关闭流程,你不执行 rollback 就好像是强行关闭程序,难免发生奇怪的问题。

(看完/读完)这篇文章有何感想! sbf888胜博发的分享…

SBF胜博发游戏在线官网IOUtils:读取文件转字符串,中文字符无法转换

( SBF胜博发游戏在线官网 )

public class ConvertFile2String {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        File file=new File("E:\\Code\\Jretec\\PCBwebsiteProject\\PCBProject\\新建文本文档.txt");
        InputStream in=new FileInputStream(file);
//        String str=IOUtils.toString(in,"utf-8");
        StringWriter writer = new StringWriter();
        IOUtils.copy(in, writer, "utf-8");
        String str = writer.toString();
        System.out.println(str);
    }
}

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

SBF胜博发游戏在线官网com.qiniu.common.QiniuException

( SBF胜博发游戏在线官网 )

import java.io.File;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;

public class Main {    

    public static void main(String[] args) {
        Auth auth = Auth.create(Constants.ACCESS_KEY, Constants.SECRET_KEY);    
        String uploadToken = auth.uploadToken("bucket");
        System.out.println(uploadToken);
        UploadManager uploadManager = new UploadManager();
        File file = new File("E:\\test.jpg");

        String key = file.getName().substring(0, file.getName().lastIndexOf("."));
        System.out.println(key);
        try {
            Response put = uploadManager.put(file, key, uploadToken);
            System.out.println(put.toString());
            System.out.println(put.bodyString());
        } catch (QiniuException e) {
            e.printStackTrace();
        }
    }

}

上传测试失败,抛出如下异常
com.qiniu.common.QiniuException

at com.qiniu.http.Client.send(Client.java:201)
at com.qiniu.http.Client.multipartPost(Client.java:174)
at com.qiniu.http.Client.multipartPost(Client.java:153)
at com.qiniu.storage.FormUploader.upload(FormUploader.java:54)
at com.qiniu.storage.UploadManager.put(UploadManager.java:184)
at com.qiniu.storage.UploadManager.put(UploadManager.java:163)
at com.tuntian.uploadImage.Main.main(Main.java:23)

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

SBF胜博发游戏在线官网关于类之间的依赖关系的疑惑

( SBF胜博发游戏在线官网 )

问题一:

平时在设计类的时候往往会遇到以下情况,类A依赖于类B,同时类B又依赖于类A,这样就会造成循环依赖。
如果在类中存在循环依赖,就会导致,如果A中有改变可能会影响B,同时B如果有变化也会影响A(个人观点)。

在这个过程中,我又抽象出一个新的类C,这个类用来存放类A和类B相互依赖的部分,当A需要调用类B,在这个模型中可以直接去调用C。但是此时类C是不会去依赖类A和类B,我觉得这是一个难点,如果在不依赖类B和类A的前提下,完成以前一样的逻辑(这里我认为会存在很多重复的代码)。

Q:在设计过程中,循环依赖是否是允许的?如何解决循环依赖?

问题二:
平时我们在用spring写业务逻辑的时候,当Service A依赖Service B和Service C,Service B依赖Service C。每当这个时候我就会有强迫症,我想把Service B 对Service C的依赖干掉。在A中直接通过传参的方式把Service C传给Service B

如上所示,感觉在平时用spring框架的时候一些调用栈会很奇怪:

    public class A{
        private C c;
        
        private B b;
        
        public void methodA(){
            c.methodC();
            b.methodB();
        }
    }
    
    public class B{
        private C c;
        public void methodB(){
            c.methodC();
            doSomething();
        }
    }
    

如上代码.每当这个时候我都想把在A中c.methodC()的结果返回值通过参数传给B.methodB(),但是这样会导致methodB()方法中多了一个参数。感觉在设计上又不是特别合理,因为我觉得在调用B.methodB()的时候是不需要感知C的存在的。

Q:怎么用面向对象的角度去理解问题二这个场景。

谢谢

  1. 循环依赖当然是允许的,没有任何规定说依赖只能是单向的。看看设计模式中的中介者、观察者等模式,它们就是典型的循环依赖关系。以观察者模式为例:订阅者会依赖观察者,观察者需要通知订阅者所以也要依赖它们。

  2. 不能这样做。如果不是依赖关系设计有问题,那么A依赖B和C、B依赖C说明A和B确实需要C。如果像你说的那样把B对C的依赖干掉,那么B就没有存在的必要了,此时B将退化为A的“附属类”,或者说是A的“专用方法类”。也就是说,B的可复用性就会大打折扣,如果以后有其他类,比如D,也需要用到B的话,那么D将不得不也依赖C,这就把对B和C的依赖绑死了,但D未必需要C才能干活啊,仅仅是为了“满足”B就必须先弄一个C,是不是很奇怪?(如果D跟A一样确实也需要C那是可以的,这里说的是D本身不需要C的情况)

所以,首先确定B是否确实需要C,如果答案是肯定的,那就安心地这么干吧。

1、相互依赖确实是代码中让人纠结的坏味道,没有更好的设计方案的情况下,只能尽量不让这种混乱扩散到其他类。
2、对于分层设计,我个人是允许同一层的类之间相互依赖的,比如存在 Service 层和 DAO 层,前者依赖后者,而后者内部的类也可以相互依赖,但绝不允许 DAO 层的类调用 Service 层,一旦出现这种意愿,说明这部分逻辑本来就应该放在 Service 层。

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

2016最新官网【SOS】nginx无法解析php文件?

( 2016最新官网 )

已经在服务器上装了nginx和php,php-fpm(监听9000端口)
可以正常显示html,但是每当输入url打开一个php时,无法正常解析,导致变成下载模式

nginx.conf如下

现在打开php直接变成404…Orz

干脆贴出来吧,估计是这一段的问题,搞了好久都没进展….

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

这样写试一下 用nginx -t命令检查你的nginx配置文件是否有错误
location /index.php {

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;

}

我以前也有过,当时是centos6,后来换成7了。
之后绑定好域名就好了

还能显示nginx的画面
问题是我用域名安装源码怎么就显示404
用ip安装弹出php文件的下载,php我也运行了啊。
网站默认主目录我也已经定位到www.38934.tech上面了。
苦恼啊!
2016-10-26 09:33:34
管理员
请您确保以下3个设置:

  1. 域名解析到服务器IP

  2. Nginx网站管理里有配置这个域名

  3. 修改完配置后有重载或重启Nginx
    目前已为你修正配置。

第一步 nginx.conf的配置

location / {
        if (!-e $request_filename) {
             rewrite  ^/(.*)$  /index.php/$1  last;
             break;
        }
    }

    location ~ ^/s-([0-9a-z]+)-(.*) {
        rewrite ^/s-([0-9a-z]+)-(.*) /shtmls/$1/$2 last;
        break;
    }

    location ~ .+\.php($|/) {
        set $script    $uri;
        set $path_info  "/";
        if ($uri ~ "^(.+\.php)(/.+)") {
              set $script     $1;
              set $path_info  $2;
        }

        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param SCRIPT_FILENAME  $document_root/$script;
        fastcgi_param SCRIPT_NAME $script;

    }

第二步 sudo vim /etc/php5/fpm/pool.d/www.conf
将 ;listen = /var/run/php5-fpm.sock
改成 listen = 127.0.0.1:9000

你的代码直接放在/root里么?你改过之后的完成配置也发一下吧。

(看完/读完)这篇文章有何感想! 2016最新官网的分享…

SBF胜博发游戏在线官网如何在自己的项目中实现word在线编辑

( SBF胜博发游戏在线官网 )

希望能在自己(公司)的项目中实现word在线编辑,感觉无从下手

(不好意思,没说清楚,我补充一下:比如我上传了一份word,然后能在线编辑这个word文件,编辑之后能保存)

谢邀~
富文本编辑器
http://summernote.org/

你可以使用百度的ueditor
http://ueditor.baidu.com/webs…

如果不考虑富文本编辑器的话,硬要实现office系列的在线编辑。

你大概有以下几条路走:
1、只考虑IE,用专有ActiveX插件,实现浏览器里面编辑office文档。https://github.com/stone0090/…
2、现代浏览器,接入在线的office online 。

不要说在线 Word 编辑,就是在线 Word 阅读都已经很不容易了,这个功能太专业了。

网上能搜到一些阅读组件,大部分是收费的,比如永中的高清服务器版本收费大概是80K。

另外,你可以去看看 Open Office 有没有提供相关的组件。Open Office 一直是开源的 Office 解决方案。

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…

2016最新官网php中的字符编码

( 2016最新官网 )

$str1 = "\xe4\xb8\xad";

$str2 = '\xe4\xb8\xad';

$str3 = '中';

能否详细解释一下三者的区别,是否可以相互转化

第一次在segmentfault上回答问题。。

PHP字符串变量,双引号和单引号的意义是不同的

使用双引号时会转义 单引号时不转义
使用双引号时,$xxxx文本会被相应变量的值替换,单引号没有这个效果

Eg.

$abc='123';
echo "$abc"; //这样会输出123
echo '$abc'; //这样会输出$abc
echo "\n"; //这样会输出一个换行符
echo '\n'; //这样会输出\n两个字符(一个斜杠一个n)

回到问题,
“中”这个汉字在UTF-8的16进制编码是0xe4,0xb8,0xad
因此在双引号字符串中,会被转义为 “中” x开头表示这是一个以十六进制表达的字符,就和HTML中&xe4; 一样
单引号字符串中,直接输出xe4xb8xad

如果你的环境编码是在UTF-8下面, str1和str3等价, 如果直接echo, 都会输出”中”, 如果是二进制层面三个字节比较, 也是完全相等, PHP中的字符串就是直接本地编码二进制存储的

如果你的环境编码是非UTF-8(例如GBK), str1基本上是个乱码, str1和str3也不再等价

至于str2, 它无论什么时候都会输出 ‘\xe4\xb8\xad’ (不含引号, 在单引号的字符串中, 只有单引号本身需要转义成\’, 其它情况的\都视为普通字符处理

只解释第一个与第二个的区别,也就是单引号与双引号的区别

双引号:引号内部会被转义
单引号:引号内部不会被转义

$a = 123;

echo "output:$a";//output:123
echo 'output:$a';//output:$a

//下面的示例仅限linux的php-cli
echo "new line\nsecond line";
/*
会换行,输出:
new line
second line
*/

echo 'no new line\n aaa';
/*
不会换行,输出:
no new line\n aaa
*/

\x后跟着十六进制数字的属于转义字符,转义字符只有在双引号"中才起作用。单引号中只有对单引号本身'和反斜杠\的转义有效,其他的都无效。

PHP本身不区分字符编码。也就是说,$str1是一个三字节的字符串,字符串的三个字节分别是(十六进制编码)E4 B8 AD。如果在UTF-8编码中,就是字。其他编码中就不一定了。

$str2则是一个12字节的字符串,就是你输入的那些字符。

$str3则是一个字符串,如果你把文件以UTF-8编码保存,那就和$str1是一样。如果你以GBK保存,那就是两个字节的D6 D0,如果你以BIG5保存,就是A4 A4


不管是UTF-8、GBK还是BIG5,甚至于很多其他的语言编码,都是遵循EUC的,也就是说对于ASCII字符,他们的编码都是一致的,所以无论用哪种编码保存,对PHP的代码工作都不会有影响。但是对于非ASCII字符就有很大的区别。

所以PHP中的非ASCII字符要正常显示,就要保证你的保存编码和输出编码是一致的。如果是输出的是HTML,是通过meta标签或者在HTTP Header中声明编码的。如果不一致,那就会出现乱码了。

(看完/读完)这篇文章有何感想! 2016最新官网的分享…

SBF胜博发游戏在线官网微信第三方图片多选

( SBF胜博发游戏在线官网 )

微信使用第三方的上传插件不能多选,用微信的又因为一套appid多个系统使用,总会出一些奇葩问题,请问各位怎么解决在微信浏览器下图片上传多选的问题?

(看完/读完)这篇文章有何感想! SBF胜博发游戏在线官网的分享…