今天也要加油啊江同学

Kechuangclub项目中遇到的一些问题

Kechuangclub项目中遇到的一些问题

  1. 读写文件的问题

有一个需求是,要生成excel并发送给前端,一开始在本地是放在static下的,一切都OK,打包后发现并不知道static的地址,一开始用System.getProperty(“user.dir”) 定位项目位置,是可以的,但是呢在docker下还是不行,所以只好在docker中找到一个文件夹存放excel,然后把服务器下放前端的位置下的一个文件夹与这个虚拟位置关联起来——具体在运行容器时添加参数-v:sudo docker run -d -p 8081:8081 -v /var/www/html/excel:/tmp myuser/myprogram:4.1.dev

2. int和Integer的不同

Integer是int的包装类,int则是java的一种基本数据类型
Integer变量必须实例化后才能使用,而int变量不需要
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
Integer的默认值是null,int的默认值是0。所以该项目中dao层有一个select接口,在service层用int的话如果是null则会报错,但是用Integer则不会。

3. @SelectKey的用法

举例:

@SelectKey(statement = “SELECT LAST_INSERT_ID()”, keyProperty = “activity.id”, before = false, resultType = int.class)
一开始以为返回的是id,但是后来发现一直是0或者1.于是找了一下才发现,插入成功则返回1,失败返回0;而id已经返回到数据结构的id属性里了,只要get就可以得到。

另外,before表示SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,这种适合那种主键不是自增的类型

4. restcontroller和controller的区别

@RestController = @ResponseBody + @Controller

如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

5. @Autowired的用法

autowired有四种方式:

byName、byType、constructor、autodectect

其中@Autowired注解是使用byType方式的

byType方式是根据属性类型在容器中寻找bean类。

例如:

@Autowired
private ActivityService activityService;

规则如下:

1.Spring先去容器中寻找ActivityService类型的bean(先不扫描newsService字段)

2.若找不到一个bean,会抛出异常

3.若找到一个ActivityService类型的bean,自动匹配,并把bean装配到activityService

4.若ActivityService类型的bean有多个,则扫描后面activityService字段进行名字匹配,匹配成功后将bean装配到activityService

6. 前后端都必须要通过80端口访问怎么办

解决方案1:前端放在springboot项目里

解决方案2:后端的url用nginx做一个转发

   location /service/ {

    proxy_pass http://localhost:8080/;

  add_header Access-Control-Allow-Origin *;#跨域问题,不过没用到

  }

这里稍微注意一下localhost:8080最后是加了斜杠的,跳转到的是localhost:8080/myurl

不加的话,则会跳转到localhost:8080/service/myurl

xinyu