记录一下用SpringBoot写后台遇到的坑
一.使用SpringBoot自带的邮件包发送请求邮箱时,在本地可以发送,但部署到阿里云之后邮箱发送错误。
最后翻了好多地方也问了一下阿里云的客服,回答说为了防止邮件泛滥,关闭了25端口,所以邮件发送失败了。
解决办法是让用SSL加密的465端口。具体代码如下:(使用yaml)
spring:
mail:
host: smtp.qq.com
password: 密钥
username: 账号
default-encoding: UTF-8
protocol: smtp
port: 465
properties:
mail:
smtp:
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
ssl:
enable: true
starttls:
enable: true
required: true
这个问题没解决之前想着国外的VPS应该不会这么干,所以使用了俄罗斯的VPS,搭建好了只有发现压根没办法访问(能ping通,同时供应商支持国内访问),
后来经过不断测试发现,*就能访问,国内无法使用80端口访问,(这不是之前用的时候1024,1028都能正常访问啊),所以改了一下服务的端口号,避开80端口,
一下子就通了。
最后附上配置德鲁伊的关键代码(感谢b站:狂神说java,让我一天半学明白了Springboot)
1.yaml的配置:
//在数据库连接字符串后面加上
type: com.alibaba.druid.pool.DruidDataSource
2.
DruidConfig
/**
* Created with IntelliJ IDEA.
* User: shangying.
* Date: 2021/5/15.
* Time: 18:35.
* Explain:
*/
@Configuration
public class DruidConfig {
/*
将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
@ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
*/
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
//配置 Druid 监控管理后台的Servlet;
//内置 Servlet 容器时没有web.xml文件,所以使用 Spring Boot 的注册 Servlet 方式
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUsername", "admin"); //后台管理界面的登录账号
initParams.put("loginPassword", "123456"); //后台管理界面的登录密码
//后台允许谁可以访问
//initParams.put("allow", "localhost"):表示只有本机可以访问
//initParams.put("allow", ""):为空或者为null时,表示允许所有访问
initParams.put("allow", "");
//deny:Druid 后台拒绝谁访问
//initParams.put("kuangshen", "192.168.1.20");表示禁止此ip访问
//设置初始化参数
bean.setInitParameters(initParams);
return bean;
}
}